Provide Best Programming Tutorials

106. Construct Binary Tree from Inorder and Postorder Traversal

Questioin

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

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

For example, given

inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]

Return the following binary tree:

    3
   / \
  9  20
    /  \
   15   7

Solution

import java.util.HashMap;
import java.util.Map;

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 * int val;
 * TreeNode left;
 * TreeNode right;
 * TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    private int[] postorder;
    private int[] inorder;
    private Map<Integer, Integer> inOrderMap = new HashMap<>();
    int postIdx;

    public static void main(String[] args) {
        int[] postOrder = {9, 15, 7, 20, 3};
        int[] inOrder = {9, 3, 15, 20, 7};

        Solution solution = new Solution();
        solution.buildTree(inOrder, postOrder);
    }


    public TreeNode buildTree(int[] inorder, int[] postorder) {
        this.postorder = postorder;
        this.inorder = inorder;
        for (int i = 0; i < inorder.length; i++) {
            inOrderMap.put(inorder[i], i);
        }
        this.postIdx = postorder.length - 1;


        return helper(0, inorder.length);
    }

    private TreeNode helper(int inLeft, int inRight) {
        if (inLeft == inRight) return null;
        int value = postorder[postIdx];
        TreeNode root = new TreeNode(value);
        int index = inOrderMap.get(value);

        postIdx--;

        root.right = helper(index + 1, inRight);
        root.left = helper(inLeft, index);


        return root;

    }
}

 

Leave a Reply

Close Menu