题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
1 public class Solution {
2 public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
3 if(pre==null||in==null||pre.length==0||in.length==0||pre.length!=in.length){
4 return null;
5 }else{
6 return construct(pre,0,pre.length-1,in,0,in.length-1);
7 }
8 }
9
10 private static TreeNode construct(int[] pre,int ps,int pe,int[] in,int is,int ie){
11 if(ps>pe||is>ie){
12 return null;
13 }
14 int value=pre[ps];
15 int index=is;
16 while(index<=ie&&in[index]!=value){
17 index++;
18 }
19
20 TreeNode tree=new TreeNode(value);
21
22 tree.left=construct(pre,ps+1,ps+(index-is),in,is,index-1);
23 tree.right=construct(pre,ps+(index-is)+1,pe,in,index+1,ie);
24 return tree;
25 }
26 }