Construct Binary Tree from Inorder and Postorder Traversal

Problem

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

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

Solution

public class Solution {
    int i; //index of inorder
    int p; //index of postorder

    public TreeNode buildTree(int[] inorder, int[] postorder) {
        i = inorder.length - 1;
        p = postorder.length - 1;
        return helper(inorder, postorder, null);
    }

    private TreeNode helper(int[] inorder, int[] postorder, TreeNode root) {
        if (p < 0) return null;
        TreeNode node = new TreeNode(postorder[p--]);
        //Create right subtree if right node exists  
        if (inorder[i] != node.val) node.right = helper(inorder, postorder, node);
        i--;
        //Create left subtree if left node exists 
        if (root == null || inorder[i] != root.val) node.left = helper(inorder, postorder, root);
        return node;
    }
}

Analysis

results matching ""

    No results matching ""