重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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 }