问题描述
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
class Solution {
public static TreeNode restore(int[] pre, int[] mid){
if(null == pre || null == mid){
return null;
}
return handle(pre, 0, pre.length; mid, 0, mid.length);
}
private static TreeNode handle(int[] pre,int begin1, int end1, int[] in, int begin2, int end2){
if(begin1 > end1 || end1 >= pre.length || begin1 < 0){
return null;
}
int val = pre[begin1];
int mid = begin2;
for(int i = begin2; i < end2; i++){
if(val == in[i]){
mid = i;
break;
}
}
TreeNode result = new TreeNode(val);
result.left = handle(pre, begin1 + 1, begin1 + (mid - begin2), in, begin2, mid - 1);
result.right = handle(pre, end1 - (end2 - mid) + 1, end1, in, mid + 1, end2);
return result;
}
}