Friday, February 7, 2014

Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.

Solution:
1. Construct root from the first element in pre-order.
2. Find root's index(hash map) in in-order, and then we can decide its left sub-tree and right sub-tree.

public class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        HashMap map = new HashMap();
        
        for(int i = 0; i < inorder.length; i++)
            map.put(inorder[i],i);
            
        return helper(inorder, 0, inorder.length-1, preorder, 0, preorder.length-1, map);
    }
    
    public TreeNode helper(int[] inorder, int i_beg, int i_end, int[] preorder, int p_beg, int p_end, HashMap map){
        if(i_beg > i_end || p_beg > p_end)
            return null;
            
        int root_val = preorder[p_beg];
        TreeNode root = new TreeNode(root_val);
        
        int i = map.get(root.val);
        
        root.left = helper(inorder, i_beg, i-1, preorder, p_beg+1, p_beg+1 + i-1-i_beg, map);
        root.right = helper(inorder, i+1, i_end, preorder, p_beg+1 + i-1-i_beg + 1, p_end, map);
        
        return root;
    }
}

No comments:

Post a Comment