Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
通过中序和后序构造二叉树。
public class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
return buildTree(inorder,0,inorder.length-1,postorder,0,postorder.length-1);
}
private TreeNode buildTree(int[] inorder,int inStart,int inEnd,int[] postorder,int postStart,int postEnd){
if(inStart>inEnd||postStart>postEnd)
return null;
int val=postorder[postEnd];
TreeNode p=new TreeNode(val);
int k=0;
for(int i=0;i<inorder.length;i++){
if(inorder[i]==val){
k=i;
break;
}
}
p.left=buildTree(inorder,inStart,k-1,postorder,postStart,postStart+k-inStart-1);
p.right=buildTree(inorder,k+1,inEnd,postorder,postStart+k-inStart,postEnd-1);
return p;
}
}