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.
[code]
public class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder==null || preorder.length==0)return null;
return helper(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
}
TreeNode helper(int[]preorder, int l1, int h1, int[]inorder, int l2, int h2)
{
if(l1>h1)return null;
TreeNode root=new TreeNode(preorder[l1]);
int rootIndex=0, leftLength=0;
for(int i=l2;i<=h2;i++)
{
if(inorder[i]==root.val)
{
rootIndex=i;break;
}
}
leftLength=rootIndex-l2;
root.left=helper(preorder,l1+1,l1+leftLength,inorder,l2,rootIndex-1);
root.right=helper(preorder,l1+leftLength+1,h1,inorder,rootIndex+1,h2);
return root;
}
}
Construct Binary Tree from Inorder and Postorder Traversal
public class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder==null || inorder.length==0)return null;
return helper(inorder,0,inorder.length-1,postorder,0,postorder.length-1);
}
TreeNode helper(int[]inorder, int l1, int h1, int[]postorder, int l2, int h2)
{
if(l1>h1)return null;
TreeNode root=new TreeNode(postorder[h2]);
int rootIndex=0, leftLength=0;
for(int i=l1;i<=h1;i++)
{
if(inorder[i]==root.val)
{
rootIndex=i;break;
}
}
leftLength=rootIndex-l1;
root.left=helper(inorder,l1,rootIndex-1,postorder,l2,l2+leftLength-1);
root.right=helper(inorder,rootIndex+1,h1,postorder,l2+leftLength,h2-1);
return root;
}
}