java中怎样存储遍历的数据_【数据算法】Java实现二叉树存储以及遍历
二叉树在java中我们使用数组的形式保存原数据,这个数组作为二叉树的数据来源,后续对数组中的数据进行节点化操作。
步骤就是原数据:数组
节点化数据:定义 Node节点对象
存储节点对象:通过LinkedList保存Node节点对象
在操作过程中我们需要将当前结点和前一节点、后一节点进行关系绑定
package tree;
import java.util.LinkedList;
import java.util.List;
/**
* 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历
*
* 参考资料0:数据结构(C语言版)严蔚敏
*
* 参考资料1:http://zhidao.baidu.com/question/81938912.html
*
* 参考资料2:http://cslibrary.stanford.edu/110/BinaryTrees.html#java
*
* @author ocaicai@yeah.net @date: 2011-5-17
*
*/
public class BinTreeTraverse2 {
private int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private static List nodeList = null;
/**
* 内部类:节点
*
* @author ocaicai@yeah.net @date: 2011-5-17
*
*/
private static class Node {
Node leftChild;
Node rightChild;
int data;
Node(int newData) {
leftChild = null;
rightChild = null;
data = newData;
}
}
public void createBinTree() {
nodeList = new LinkedList();
// 将一个数组的值依次转换为Node节点
for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {
nodeList.add(new Node(array[nodeIndex]));
}
// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树
for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {
// 左孩子
nodeList.get(parentIndex).leftChild = nodeList
.get(parentIndex * 2 + 1);
// 右孩子
nodeList.get(parentIndex).rightChild = nodeList
.get(parentIndex * 2 + 2);
}
// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理
int lastParentIndex = array.length / 2 - 1;
// 左孩子
nodeList.get(lastParentIndex).leftChild = nodeList
.get(lastParentIndex * 2 + 1);
// 右孩子,如果数组的长度为奇数才建立右孩子
if (array.length % 2 == 1) {
nodeList.get(lastParentIndex).rightChild = nodeList
.get(lastParentIndex * 2 + 2);
}
}
/**
* 先序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void preOrderTraverse(Node node) {
if (node == null)
return;
System.out.print(node.data + " ");
preOrderTraverse(node.leftChild);
preOrderTraverse(node.rightChild);
}
/**
* 中序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void inOrderTraverse(Node node) {
if (node == null)
return;
inOrderTraverse(node.leftChild);
System.out.print(node.data + " ");
inOrderTraverse(node.rightChild);
}
/**
* 后序遍历
*
* 这三种不同的遍历结构都是一样的,只是先后顺序不一样而已
*
* @param node
* 遍历的节点
*/
public static void postOrderTraverse(Node node) {
if (node == null)
return;
postOrderTraverse(node.leftChild);
postOrderTraverse(node.rightChild);
System.out.print(node.data + " ");
}
public static void main(String[] args) {
BinTreeTraverse2 binTree = new BinTreeTraverse2();
binTree.createBinTree();
// nodeList中第0个索引处的值即为根节点
Node root = nodeList.get(0);
System.out.println("先序遍历:");
preOrderTraverse(root);
System.out.println();
System.out.println("中序遍历:");
inOrderTraverse(root);
System.out.println();
System.out.println("后序遍历:");
postOrderTraverse(root);
}
}
java中怎样存储遍历的数据_【数据算法】Java实现二叉树存储以及遍历相关推荐
- java中的静态变量的作用域_详解JAVA中static的作用
1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...
- java中demo接人_return的用法_如何理解java中return的用法?
C语言中return用法?(请熟练者进) return是返回值,这个返回值是和函数的类型有关的,函数的类型是什么,他的返回值就是什么 比方主函数intmain() {}这里就必须有一个return,只 ...
- java中的强制类型转换注意事项_浅谈Java中强制类型转换的问题
为了更好的理解我们先看下面的例子: package com.yonyou.test; import java.util.ArrayList; import java.util.Iterator; im ...
- Java中static的作用详解_详解java中static关键词的作用
在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...
- java中数学公式要引用什么包_五、java数学函数
java.lang包中存放了大量数学函数,并且这些方法在类Math中是作为static方法出现的,所以引用一个特定的函数,只需将类Math和一个圆点写在要使用的方法前.如方法sqrt()是用来计算存储 ...
- java中bean的定义有哪些_详解Java的Spring框架中bean的定义以及生命周期
bean的定义形成应用程序的骨干是由Spring IoC容器所管理的对象称为bean.bean被实例化,组装,并通过Spring IoC容器所管理的对象.这些bean由容器提供,例如,在XML的定义, ...
- JAVA中如何取map的值_如何在java中取map中的键值 的两种方法
第一种方法根据键值的名字取值 import java.util.HashMap; import java.util.Map; public class Test { /** * @param args ...
- java中关于线程的状态属性_深入理解Java多线程与并发框(第①篇)——线程的状态...
![](http://img.blog.itpub.net/blog/2020/03/20/5d189a73e1147f37.png?x-oss-process=style/bb) **1. 新建状态 ...
- Java中如何实现添加用户信息_如何通过Java客户端在Active Directory中创建新用户并将其添加到现有组...
我是初学者,我尝试用 Java实现Active Directory客户端.到目前为止,我编写了以下代码: import java.util.Hashtable; import javax.naming ...
- java中如何按名字来排序_如何在Java中对名称和年龄进行排序
我是Java 8的新手,我只想按名称排序.但条件是:如果名称重复,则应根据年龄对其进行排序. 例如我的输入是 tarun 28 arun 29 varun 12 arun 22 并且输出应该是 aru ...
最新文章
- iOS SDWebImage加载webp
- 人人都能看懂的 6 种限流实现方案!(纯干货)
- 华为北大等打造的Transformer竟在CV上超过CNN
- MybatisPlus中插入数据获取主键值
- JZOJ 5474. 【NOIP2017提高组正式赛】时间复杂度
- [网络安全自学篇] 五十八.Windows安全缺陷利用之再看CVE-2019-0708及反弹shell防御措施
- MySQL之——GROUP BY分组取字段最大值
- 前端学习(3058):vue+element今日头条管理-回顾
- Cocos2d-x 3.2:定时器的使用和原理探究(2)
- Linux0.11 kernel/exit.c中的free_page_tables()
- 微软快捷键截图_如何在Microsoft Office的屏幕提示中显示快捷键
- 在Flask中上传本地图片到服务器
- 用matlab微分方程求解,用MATLAB求解微分方程
- 抖音壁纸表情包小程序搭建部署说明、广告分佣规则说明以及迭代新计划
- JavaScript 事件(冒泡捕获)处理模型
- 保姆级教程,如何发现 GitHub 上的优质项目?
- scrollbar滚动条修改样式
- asp毕业设计——基于asp+access的博客网站设计与实现(毕业论文+程序源码)——博客网站
- After Effects Premiere 教程收集
- 勿用Windows 8取代Windows XP的十大理由