wayetan
1/3/2014 - 10:46 AM

Construct Binary Tree from Preorder and Inorder Traversal

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.
 */
 
 /**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return helper(0, 0, inorder.length - 1, preorder, inorder);
    }
    public TreeNode helper(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) {
    	if(preStart > preorder.length - 1 || inStart > inEnd) return null;
    	TreeNode root = new TreeNode(preorder[preStart]);
    	int inIndex = 0; // index of current root in inorder array
    	for(int i = inStart; i <= inEnd; i++) {
    		if(inorder[i] == root.val) {
    			inIndex = i;
    		}
    	}
    	root.left = helper(preStart + 1, inStart, inIndex - 1, preorder, inorder);
    	root.right = helper(preStart + inIndex - inStart + 1, inIndex + 1, inEnd, preorder, inorder);
    	return root;
    }
}