重建二叉树

 1 public class Solution {
 2     public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
 3         
 4         TreeNode root = helper(pre,in,0,pre.length - 1,0,in.length - 1);
 5         
 6         return root;
 7     }
 8     
 9     public TreeNode helper(int[] pre,int[] in,int startPreorder,int endPreorder,int startInorder,int endInorder){
10         
11         if(startPreorder > endPreorder || startInorder > endInorder)
12             return null;
13         
14         
15         //前序遍历序列的第一个数字是根节点的值
16         TreeNode root = new TreeNode(pre[startPreorder]);
17         
18         
19         //在中序遍历中找到根节点的值
20         int rootInorder = startInorder;
21         for(;rootInorder <= endInorder;rootInorder++){
22             
23             if(in[rootInorder] == pre[startPreorder]){
24                 break;
25             }
26         }
27         int offset = rootInorder - startInorder;
28         int leftPreorderEnd = startPreorder + offset;
29         
30         if(offset > 0){
31             
32             root.left = helper(pre,in,startPreorder + 1,leftPreorderEnd,startInorder,rootInorder - 1);
33         }
34         
35         if(offset < endPreorder - startPreorder){
36             root.right = helper(pre,in,leftPreorderEnd + 1,endPreorder,rootInorder + 1,endInorder);
37             
38         }
39         return root;
40         
41     }
42     
43 }

 

posted @ 2017-12-06 14:30  qq29oo  阅读(146)  评论(4)    收藏  举报