Java 二叉树的实现以及遍历
2016-04-11 16:22
555 查看
import java.util.LinkedList; import java.util.List; /** * Created by yhq on 2016/4/11. */ public class BinTree{ private static int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9}; private static List<Node> nodeList = null; public static void createBinTree() { nodeList = new LinkedList<Node>(); //放到链表中 for (int arr : array) { nodeList.add(new Node(arr)); } // 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树 for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) { // 左孩子 nodeList.get(parentIndex).leftNode = nodeList.get(parentIndex * 2 + 1); // 右孩子 nodeList.get(parentIndex).rightNode = nodeList.get(parentIndex * 2 + 2); } // 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理 int lastParentIndex = array.length / 2 - 1; // 左孩子 nodeList.get(lastParentIndex).leftNode = nodeList.get(lastParentIndex * 2 + 1); // 右孩子,如果数组的长度为奇数才建立右孩子 if (array.length % 2 == 1) { nodeList.get(lastParentIndex).rightNode = nodeList.get(lastParentIndex * 2 + 2); } } private static class Node { Node leftNode; Node rightNode; int data; private Node(int data) { leftNode = null; rightNode = null; this.data = data; } } /** * 先续遍历 */ public static void preOrderTraverse(Node node) { if (node == null) { return; } System.out.print(node.data + "\t"); preOrderTraverse(node.leftNode); preOrderTraverse(node.rightNode); } public static void sufOrderTraverse(Node node){ if(node==null){ return ; } sufOrderTraverse(node.rightNode); System.out.print(node.data); sufOrderTraverse(node.leftNode); } public static void inOrderTraverse(Node node){ if(node==null){ return ; } inOrderTraverse(node.leftNode); System.out.print(node.data); inOrderTraverse(node.rightNode); } public static void main(String[] args) { BinTree tree = new BinTree(); tree .createBinTree(); Node root = nodeList.get(0); preOrderTraverse(root); inOrderTraverse(root); sufOrderTraverse(root); } }
相关文章推荐
- Java 二叉树的实现以及遍历
- 注释驱动的 Spring cache 缓存介绍
- java 字符串,表达式,等陷阱
- Spring Boot 新一代Spring Java应用 : 你能感觉在使用 JavaEE 规范吗?
- SpringMVC+Spring+Mybatis+Mysql项目搭建
- eclipse 远程调试tomat
- 配置JDK环境变量
- Eclipse下 java.lang.OutOfMemoryError: PermGen space
- Java: JDK与SDK的区别
- JavaSe基础(28)-- 字符流
- Java:单例模式的七种写法
- java 关于单例模式的一点思考
- JavaSe基础(27)-- 字节流
- 使用Spring Security保护web应用安全
- java Reentrant Lock
- hadoop java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: log_analys
- 霍夫曼编码和解码
- [疯狂Java]JDBC:加载数据库驱动、连接数据库
- LeetCode Climbing Stairs JAVA
- 在adt bundle中自带的eclipse中没有NDK设置的解决方法?