代码改变世界

java版二叉树算法实现

2016-03-17 21:51  taixuyingcai  阅读(240)  评论(0编辑  收藏  举报
 1 import java.util.ArrayList;
 2 class BinaryTree {
 3   private static class TreeNode {
 4     int data;
 5     TreeNode left;
 6     TreeNode right;
 7     TreeNode(int data){
 8       this.data = data;
 9       left = null;
10       right = null;
11     }
12   }
13   
14   static int[] arr = {1,2,3,4,5,6,7,8,9};
15   static ArrayList<TreeNode> tree = new ArrayList<TreeNode>();
16   private static void creatTree() {
17     for(int i = 0; i < arr.length; i++) {
18       tree.add(new TreeNode(arr[i]));
19     } 
20 
21     // 建立父亲与孩子关系
22     for(int i = 0; i <= arr.length / 2 - 1; i++) {
23       tree.get(i).left = tree.get(i * 2 + 1);
24       tree.get(i).right = tree.get(i * 2 + 2);
25     }
26    // int lastParent = arr.length / 2 - 1;
27    // tree.get(lastParent).left = tree.get(lastParent * 2 + 1);
28    // if(arr.length % 2 == 1) {
29    //   tree.get(lastParent).right = tree.get(lastParent * 2 + 2);
30    // }
31   }
32   private static void preOrder(TreeNode node){
33     if(node == null) return;
34     System.out.print(node.data + " ");
35     preOrder(node.left);
36     preOrder(node.right);
37   }
38              
39   private static void inOrder(TreeNode node) {
40     if(node == null) return;
41     inOrder(node.left);
42     System.out.print(node.data + " ");
43     inOrder(node.right);
44   }
45 
46   private static void postOrder(TreeNode node) {
47     if(node == null) return;
48     postOrder(node.left);
49     postOrder(node.right);
50     System.out.print(node.data + " ");  
51   }
52 
53   public static void main(String[] args) {
54    creatTree();
55    TreeNode root = tree.get(0);
56    System.out.println("先序:");
57    preOrder(root);
58    System.out.println();
59    System.out.println("中序:");
60    inOrder(root);
61    System.out.println();
62    System.out.println("后序:");
63    postOrder(root);
64    System.out.println();
65 
66 
67 
68   }
69 }

以arraylist为数组结构实现的一个完全二叉树,第n个结点的左孩子为2n+1,右孩子为2n+2