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