重建二叉树

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

 

posted @ 2019-05-13 22:03  JingMo  阅读(90)  评论(0)    收藏  举报