Construct Binary Tree from Preorder and Inorder Traversal

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

Notice

You may assume that duplicates do not exist in the tree.

Example

Given in-order [1,2,3] and pre-order [2,1,3], return a tree:

  2
 / \
1   3

Solution: Use the preorder property and divide conquer build tree.

public TreeNode buildTree(int[] preorder, int[] inorder) {
    if(preorder.length != inorder.length) {
        return null;
    }
    return buildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
}

public TreeNode buildTree(int[] preorder, int pstart, int pend, int[] inorder, int istart, int iend) {
    if(pstart > pend || istart > iend) {
        return null;
    }
    TreeNode root = new TreeNode(preorder[pstart]);
    int proot = 0;
    for(int i = 0; i < inorder.length; i++) {
        if(inorder[i] == root.val) {
            proot = i;
            break;
        }
    }
    int len = proot - istart;
    root.left = buildTree(preorder, pstart + 1, pstart + len, inorder, istart, proot - 1);
    root.right = buildTree(preorder, pstart + len + 1, pend, inorder, proot + 1, iend);
    return root;
}

results matching ""

    No results matching ""