106. Construct Binary Tree from Inorder and Postorder Traversal

public TreeNode buildTree(int[] inorder, int[] postorder) {
    return buildTree(inorder, postorder, inorder.length - 1, 0, postorder.length - 1);
}

private TreeNode buildTree(int[] inorder, int[] postorder, int il, int ir, int pl) {
    if (pl < 0 || il < ir)
        return null;

    TreeNode root = new TreeNode(postorder[pl]);
    int inRootPos = il;
    for (int i = il; i >= ir; i--) {
        if (inorder[i] == root.val) {
            inRootPos = i;
            break;
        }
    } 
    root.right = buildTree(inorder, postorder, il, inRootPos + 1, pl - 1);
    root.left = buildTree(inorder, postorder, inRootPos - 1, ir, pl - (il - inRootPos) - 1);
    return root;
}

results matching ""

    No results matching ""