Skip to content

Commit aaccdc6

Browse files
committed
build tree from inorder and preorder
1 parent a22f66b commit aaccdc6

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

PuzzleCoding/src/BuildBT.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import java.util.Arrays;
2+
import java.util.HashMap;
3+
4+
/**
5+
* Given preorder and inorder traversal of a tree, construct the binary tree.
6+
* in-order: left, root, right
7+
* pre-order: root, left, right
8+
* <p/>
9+
* <p/>
10+
* ________ 7______
11+
* / \
12+
* __10__ ___2
13+
* / \ /
14+
* 4 3 _8
15+
* \ /
16+
* 1 11
17+
* preorder = {7,10,4,3,1,2,8,11}
18+
* inorder = {4,10,3,1,7,11,8,2}
19+
*/
20+
public class BuildBT {
21+
public static void main(String[] args) {
22+
int[] preorder = new int[]{7, 10, 4, 3, 1, 2, 8, 11};
23+
int[] inorder = new int[]{4, 10, 3, 1, 7, 11, 8, 2};
24+
25+
// build b tree
26+
Node bt = buildBTInorderPreorder(inorder, preorder);
27+
bt.printBT();
28+
}
29+
30+
public static HashMap<Integer, Integer> mapIndex(int[] inorder) {
31+
HashMap<Integer, Integer> index = new HashMap<Integer, Integer>();
32+
for (int i = 0; i < inorder.length; i++) {
33+
index.put(inorder[i], i);
34+
}
35+
return index;
36+
}
37+
38+
public static Node buildBTInorderPreorder(int[] in,
39+
int[] pre) {
40+
if (in.length == 0 || pre.length != in.length)
41+
return null;
42+
43+
HashMap<Integer, Integer> index = new HashMap<Integer, Integer>();
44+
for (int i = 0; i < in.length; i++) {
45+
index.put(in[i], i);
46+
}
47+
48+
Node root = new Node(pre[0]);
49+
int rootIndex = index.get(pre[0]);
50+
root.left = buildBTInorderPreorder(Arrays.copyOfRange(in, 0, rootIndex),
51+
Arrays.copyOfRange(pre, 1, rootIndex+1));
52+
root.right = buildBTInorderPreorder(Arrays.copyOfRange(in, rootIndex + 1, in.length),
53+
Arrays.copyOfRange(pre, rootIndex+1, pre.length));
54+
return root;
55+
}
56+
}

PuzzleCoding/src/Node.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import java.util.LinkedList;
2+
import java.util.Queue;
3+
14
/**
25
* a node class for tree
36
*/
@@ -40,4 +43,29 @@ public int size() {
4043
}
4144
return size + 1;
4245
}
46+
47+
public void printBT(){
48+
Queue<Node> current = new LinkedList<Node>();
49+
Queue<Node> next = new LinkedList<Node>();
50+
51+
current.add(this);
52+
System.out.println(this.value);
53+
while (!current.isEmpty()){
54+
Node n = current.poll();
55+
if(n.left != null){
56+
System.out.print(n.left.value + " ");
57+
next.add(n.left);
58+
}
59+
if(n.right != null){
60+
System.out.print(n.right.value + " ");
61+
next.add(n.right);
62+
}
63+
if(current.isEmpty()){
64+
current.addAll(next);
65+
next.clear();
66+
System.out.println();
67+
}
68+
}
69+
70+
}
4371
}

0 commit comments

Comments
 (0)