【剑指Offer】重建二叉树

通过中序数组来切分左树和右树的子序列,在中序数组中找到和根节点相同的元素。后续的关键是找准左树右树在中序和先序数组中的子序列的位置。

 1 class Solution {
 2     public TreeNode buildTree(int[] preorder, int[] inorder) {
 3         if(preorder == null || inorder == null){
 4             return null;
 5         }
 6         return helper(preorder,inorder,0,preorder.length-1,0,inorder.length-1);
 7     }
 8     public TreeNode helper(int[] preorder ,int[] inorder,int preStart, int preEnd, int inStart, int inEnd){
 9         if(preStart > preEnd || inStart > inEnd){
10             return null;   
11         }
12         TreeNode root = new TreeNode(preorder[preStart]);
13         for(int i = inStart; i <= inEnd; i++){
14             if(inorder[i] == preorder[preStart]){
15                 root.left = helper(preorder, inorder,preStart+1,preStart+i-inStart,inStart,i-1);
16                 root.right = helper(preorder, inorder,preStart+i-inStart+1,preEnd,i+1,inEnd);
17             }
18         }
19         return root;
20     }
21 }

 

posted @ 2020-06-04 12:08  xd会飞的猫  阅读(159)  评论(0)    收藏  举报