努橙刷题编

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return helper(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1);
    }
    
    private TreeNode helper(int[] preorder, int[] inorder, int pLeft, int pRight, int iLeft, int iRight) {
        if (pLeft > pRight || iLeft > iRight) {
            return null;
        }
        TreeNode current = new TreeNode(preorder[pLeft]);
        int i;
        for (i = iLeft; i <= iRight; i++) {
            if (preorder[pLeft] == inorder[i]) {
                break;
            }
        }
        current.left = helper(preorder, inorder, pLeft + 1, pLeft + i - iLeft, iLeft, i - 1); 
        current.right = helper(preorder, inorder, pLeft + i - iLeft + 1, pRight, i + 1, iRight);
        
        // Attn: don't forget take pLeft, iLeft when calculating new p, below is incorrect
        // current.left = helper(preorder, inorder, pLeft + 1, i, iLeft, i - 1);
        // current.right = helper(preorder, inorder, i + 1, pRight, i + 1, iRight);
        
        return current;
    }
}

 

posted on 2017-07-18 00:37  努橙  阅读(121)  评论(0)    收藏  举报