Construct Binary Tree from Preorder and Inorder Traversal

题目地址:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/

题目:
Given preorder and inorder traversal of a tree, construct the binary tree.

解题思路:
这道题就是需要用一个map来存储value在inorder里面的index。

代码:
public TreeNode buildTree(int[] preorder, int[] inorder) {
    Map<Integer, Integer> map = new HashMap<>();
    for(int i = 0; i <= inorder.length - 1; i++){
        map.put(inorder[i], i);
    }
    return helper(map, preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1);
}

private TreeNode helper(Map<Integer, Integer> map, int[] preorder, int[] inorder, int preLeftBound, int preRightBound, int inLeftBound, int inRightBound){
    if(preLeftBound > preRightBound || preLeftBound > preRightBound){
        return null;
    }
    int rootVal = preorder[preLeftBound];
    TreeNode root = new TreeNode(rootVal);
    int inRootIndex = map.get(rootVal);
    int leftRangeLen = inRootIndex - inLeftBound;
    root.left = helper(map, preorder, inorder, preLeftBound + 1, preLeftBound + leftRangeLen, inLeftBound, inRootIndex - 1);
    int rightRangeLen = inRightBound - inRootIndex;
    root.right = helper(map, preorder, inorder, preLeftBound + leftRangeLen + 1, preRightBound, inRootIndex + 1, inRightBound);
    return root;
}



Comments

Popular Posts