二元樹維基傳送門:http://goo.gl/V9CcCK
以C語言實作傳送門:
Download Code傳送門:https://github.com/Celine-Chiu/BinaryTree-Java.git
我切為三個Class:Node, Btree, Test
Test.java:
擺main函式,陣列arr自定,只要一個Node有值,他的left和right就要放進陣列
裡,若無值則為-1
以以下範例來說:{7,3,6,1,-1,-1,-1,10,-1,-1,5,8,-1,-1,3,-1,-1}的樹會長成這樣
level1 7
level2 3 5
level3 6 10 8 3
level4 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| public class Test { public static void main(String args[]){ //Input,in terms of Preorder int[] arr = {7,3,6,1,-1,-1,-1,10,-1,-1,5,8,-1,-1,3,-1,-1}; Btree btree = new Btree(arr); System.out.print( "\nPreOrder\n" ); btree.preOrder(btree.root); System.out.print( "\nInOrder\n" ); btree.inOrder(btree.root); System.out.print( "\nPostOrder\n" ); btree.postOrder(btree.root); btree.size(); btree.printAll(btree.root); } } |
Node.java:
定義節點,有data, left, right
1
2
3
4
5
6
7
8
9
10
| public class Node { int data = 0; Node left; Node right; public Node(int data){ this .data = data; this .left = null ; this .right = null ; } } |
Btree.java:
二元樹,共五個method
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class Btree { Node root; private static int i = 0; private static ArrayList<integer> list = new ArrayList<integer>(); public Btree(int[] arr){ this .root = creat(arr); } private Node creat(int[] arr){ Node temp; int data = arr[i]; i++; if (data==-1) return null ; list.add(data); temp = new Node(data); temp.left = creat(arr); temp.right = creat(arr); return temp; } public void preOrder(Node n){ //中->左->右 if (n != null ) { System.out.print(n.data+ " " ); preOrder(n.left); preOrder(n.right); } } public void postOrder(Node n) { //左->右->中 if (n!= null ) { postOrder(n.left); postOrder(n.right); System.out.print(n.data+ " " ); } } public void inOrder(Node n) { //左->中->右 if (n != null ) { inOrder(n.left); System.out.print(n.data+ " " ); inOrder(n.right); } } public void printAll(Node n) { //樹的節點降冪輸出 System.out.print( "\nPrintAll: " ); Collections.sort(list, new Comparator<integer>(){ //Sort ArrayList @Override public int compare(Integer a, Integer b){ return a.compareTo(b); } }); for (int i = list.size()-1; i >= 0; i--) { System.out.print(list.get(i)+ " " ); } } public void size() { //樹的大小 System.out.print( "\nSize: " +list.size()); } } |