Skip to content

Commit 5ffaaa7

Browse files
committed
Construct Binary Tree from Preorder and Inorder Traversal
1 parent e446983 commit 5ffaaa7

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* Given preorder and inorder traversal of a tree, construct the binary tree.
3+
*
4+
* Note:
5+
*
6+
* You may assume that duplicates do not exist in the tree.
7+
*/
8+
9+
public class ConstructBinaryTreefromPreorderAndInorderTraversal {
10+
public TreeNode buildTree(int[] preorder, int[] inorder) {
11+
int length1 = preorder.length;
12+
int length2 = inorder.length;
13+
return buildTree(preorder, 0, length1, inorder, 0, length2);
14+
}
15+
16+
private TreeNode buildTree(int[] preorder, int s1, int e1, int[] inorder,
17+
int s2, int e2) {
18+
if (s1 >= e1 || s2 >= e2) {
19+
return null;
20+
}
21+
if (s1 + 1 == e1) {
22+
return new TreeNode(preorder[s1]);
23+
}
24+
int mid = preorder[s1];
25+
int i = s2;
26+
for (; i < e2; i++) {
27+
if (inorder[i] == mid) {
28+
break;
29+
}
30+
}
31+
TreeNode left = buildTree(preorder, s1 + 1, s1 + 1 + i - s2, inorder,
32+
s2, i);
33+
TreeNode right = buildTree(preorder, s1 + 1 + i - s2, e1, inorder,
34+
i + 1, e2);
35+
TreeNode root = new TreeNode(preorder[s1]);
36+
root.left = left;
37+
root.right = right;
38+
return root;
39+
}
40+
}

0 commit comments

Comments
 (0)