【剑指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 }

浙公网安备 33010602011771号