Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
You may assume that duplicates do not exist in the tree.
Solution:
We implement the algorithm recursively, for instance given the tree to obtain

That corresponds to the lists:
preorder: A B D E C and inorder: D B E A C
We see that the first element of the preorder corresponds to the root value, A.
Note that by definition:
- All the elements in the inorder tree previous to this element (A) belong to the left tree and appear in the preorder tree just after the root.
- All the elements in the inorder tree after this element (A) belong to the right tree and appear in the preorder tree at the end.
/**
* 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 buildTree(preorder, inorder, 0, 0, preorder.length);
}
public TreeNode buildTree(int[] preorder, int[] inorder,
int indexPreOrder, int indexInOrder, int elements)
{
if(elements==0)
return null;
TreeNode solution = new TreeNode(preorder[indexPreOrder]);
if(elements==1)
return solution;
int elementLeftTree=0;
for(int i=indexInOrder; inorder[i] != preorder[indexPreOrder];
i++, elementLeftTree++);
solution.left = buildTree(preorder, inorder, indexPreOrder+1,
indexInOrder, elementLeftTree);
solution.right = buildTree(preorder, inorder, indexPreOrder+elementLeftTree+1,
indexInOrder+elementLeftTree+1, elements-1-elementLeftTree);
return solution;
}
}
No comments :
Post a Comment