Construct Binary Tree from Preorder and Inorder Traversal
Basic Idea:
preorder: [1,2,4,5,7,3,6]
inorder: [4,2,7,5,1,3,6]left: right:
preorder: [2,3,5,7] preorder: [3,6]
inorder [4,2,7,5] inorder: [3,6]Java Code:
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return helper(preorder, inorder);
}
private TreeNode helper(int[] preorder, int[] inorder) {
if (preorder.length == 0 ) return null;
if (preorder.length == 1) return new TreeNode(preorder[0]);
TreeNode root = new TreeNode(preorder[0]);
int root_idx = indexOf(inorder, preorder[0]);
int l_subtree_size = root_idx;
int r_subtree_size = inorder.length - root_idx - 1;
if (l_subtree_size > 0) {
root.left = helper(Arrays.copyOfRange(preorder, 1, l_subtree_size + 1), Arrays.copyOfRange(inorder, 0, root_idx));
}
if (r_subtree_size > 0) {
root.right = helper(Arrays.copyOfRange(preorder, l_subtree_size + 1, preorder.length),
Arrays.copyOfRange(inorder, root_idx + 1, inorder.length));
}
return root;
}
private int indexOf(int[] arr, int target) {
for (int i = 0; i < arr.length; ++i) {
if (arr[i] == target) return i;
}
return -1;
}
}Python Code:
Update:
Update C++ Solution
Last updated