-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathleet105.java
37 lines (31 loc) · 1.05 KB
/
leet105.java
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
class Solution {
int[] inOrder;
int[] preOrder;
HashMap<Integer,Integer> map;
public TreeNode buildTree(int[] preorder, int[] inorder) {
this.inOrder = inorder;
this.preOrder = preorder;
this.map = new HashMap<>();
if(preOrder.length != inOrder.length || inOrder == null || preOrder == null){
return null;
}
for(int i=0; i<inOrder.length; i++){
map.put(inOrder[i], i);
}
return help(0, inOrder.length-1, 0, preOrder.length-1 );
}
public TreeNode help(int instart, int inend, int prestart, int preend){
if(prestart> preend || instart > inend){
return null;
}
TreeNode root = new TreeNode(preOrder[prestart]);
int ri = map.get(root.val);
int lst = ri -instart;
int rst = inend - ri;
TreeNode left = help(instart, ri-1, prestart+1, prestart+lst);
TreeNode right = help(ri+1, inend, preend+1-rst, preend );
root.left = left;
root.right = right;
return root;
}
}