Given preorder and inorder traversal of a tree, construct the binary tree.
Example
Given in-order [1,2,3]
and
pre-order [2,1,3]
, return a tree:
2
/ \
1 3
public class Solution {
/**
*@param preorder : A list of integers that preorder traversal of a tree
*@param inorder : A list of integers that inorder traversal of a tree
*@return : Root of a tree
*/
public TreeNode buildTree(int[] preorder, int[] inorder) {
return helper(preorder, inorder, 0, inorder.length - 1, 0);
}
TreeNode helper(int[] preorder, int[] inorder, int start, int end, int startP) {
if(start > end) return null;
if(start == end) return new TreeNode(inorder[start]);
int index = -1;
for(int i = start; i <= end; i++) {
if(inorder[i] == preorder[startP]) {
index = i;
break;
}
}
TreeNode root = new TreeNode(preorder[startP]);
root.left = helper(preorder, inorder, start, index - 1, startP + 1);
root.right = helper(preorder, inorder, index + 1, end, startP + index - start + 1);
return root;
}
}