java实现二叉树创建和遍历
2016-03-08 21:34
531 查看
今天晚上我学习了java语言的二叉树创建和遍历算法。
实现的机制和上一节课差不多。
代码如下:
上面的代码是树的每一个节点的代码。
下面的是创建树和遍历:
创建一个数组来创建数据,用树的节点来存放创建好的数据,然后用容器ArrayList来存放每一个树的节点,这样就可以形成一组森林了。
然后用父节点来为每一个叶子节点来赋值。
父节点的序号是节点数总数的二分之一也就是:list.size()/2
而对应父节点的子节点:左孩子是父节点序号*2+1,右孩子是父节点序号*2+2。
还要判断有孩子的序号是否会越界。
然后就可以赋值了。
遍历树的方法是用递归。然后调换代码顺序就可以实现左中右遍历了。结果如下图:
这是前序遍历的结果。
这就是今天晚上的学习成果了,学习了java二叉树的构造与遍历。
等下预习哈夫曼算法
实现的机制和上一节课差不多。
代码如下:
package 二叉树链表; public class Node { private int value; private Node leftChild; private Node rightChild; public Node(int value) { super(); this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public Node getLeftChild() { return leftChild; } public void setLeftChild(Node leftChild) { this.leftChild = leftChild; } public Node getRightChild() { return rightChild; } public void setRightChild(Node rightChild) { this.rightChild = rightChild; } }
上面的代码是树的每一个节点的代码。
下面的是创建树和遍历:
package 二叉树链表; import java.util.ArrayList; public class MyTree { private int[] saveValue = {1,3,6,9,13,23,27,29,34,39}; private ArrayList<Node> list = new ArrayList<Node>(); public static void main(String[] args) { MyTree mt = new MyTree(); Node root = mt.createTree(); mt.rigSearch(root); } public Node createTree(){ for(int i=0;i<saveValue.length;i++){ Node node = new Node(saveValue[i]); list.add(node); } for(int i=0;i<list.size()/2;i++){ Node node = list.get(i); Node leftNode = list.get(i*2+1); node.setLeftChild(leftNode); if(i*2+2<list.size()){ Node rightNode = list.get(i*2+2); node.setRightChild(rightNode); } } return list.get(0); } public void preSearch(Node root){ System.out.println(root.getValue()); if(root.getLeftChild()!=null){ preSearch(root.getLeftChild()); } if(root.getRightChild()!=null){ preSearch(root.getRightChild()); } } public void midSearch(Node root){ if(root.getLeftChild()!=null){ preSearch(root.getLeftChild()); } System.out.println(root.getValue()); if(root.getRightChild()!=null){ preSearch(root.getRightChild()); } } public void rigSearch(Node root){ if(root.getLeftChild()!=null){ preSearch(root.getLeftChild()); } if(root.getRightChild()!=null){ preSearch(root.getRightChild()); } System.out.println(root.getValue()); } }
创建一个数组来创建数据,用树的节点来存放创建好的数据,然后用容器ArrayList来存放每一个树的节点,这样就可以形成一组森林了。
然后用父节点来为每一个叶子节点来赋值。
父节点的序号是节点数总数的二分之一也就是:list.size()/2
而对应父节点的子节点:左孩子是父节点序号*2+1,右孩子是父节点序号*2+2。
还要判断有孩子的序号是否会越界。
然后就可以赋值了。
遍历树的方法是用递归。然后调换代码顺序就可以实现左中右遍历了。结果如下图:
这是前序遍历的结果。
这就是今天晚上的学习成果了,学习了java二叉树的构造与遍历。
等下预习哈夫曼算法
相关文章推荐
- java中的字符串简介,字符串的优化以及如何高效率的使用字符串
- MyBatis分页的拓展--合并高级查询
- AAA【Dubbo实战】 Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)
- 【Java SE】————数据类型及其转换
- java——MD5加密
- 在三大框架里运用lucene和ik分词是报java.lang.reflect.InvocationTargetException异常的解决方法
- Java单例模式
- 入住CSDN
- eclipse安装ADT后不显示插件的小问题
- leetcode:Ugly Number II 【Java】
- Java 包装类
- Java JNI Demo
- Java设计模式之简单工厂模式
- Java并发编程:volatile关键字解析
- Spring MVC 中Ajax返回字符串
- org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document fro
- Java——一种彻底的面向对象语言
- 隐式(Synchronized)锁和显式(java.util.Lock)锁
- Eclipse下进行SVN提交时报“svn: 过期”错误的解决办法
- Spring学习笔记之IoC容器