Construct Binary Tree from Inorder and Postorder Traversal

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:

/**
 * 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[] inorder, int[] postorder) {
        return buildTree(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1);
    }
    public TreeNode buildTree(int[] inorder, int l1, int r1, int[] postorder, int l2, int r2) {
        if(r1<l1) return null;
        TreeNode root = new TreeNode(postorder[r2]);
        int mid = l1;
        while(inorder[mid]!=root.val) mid++;
        root.left = buildTree(inorder, l1, mid-1, postorder, l2, l2+(mid-l1)-1);
        root.right = buildTree(inorder, mid+1, r1, postorder, r2-(r1-mid), r2-1);
        return root;
    }
}
comments powered by Disqus