仿照《王道数据结构2016版》 127页第6题。
static public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder.length==0) return null;
return InandpostTree(inorder,postorder,0,inorder.length-1,0,postorder.length-1);
}
static public TreeNode InandpostTree(int []inorder,int []postorder,int s1,int e1,int s2,int e2)
{
TreeNode root=new TreeNode(postorder[e2]);
int i=s1;
for(;inorder[i]!=root.val;i++);
int llen=i-s1;
int rlen=e1-i;
if(llen>0){
root.left =InandpostTree(inorder,postorder,s1,s1+llen-1,s2,s2+llen-1);
}
if(rlen>0){
root.right=InandpostTree(inorder,postorder,e1-rlen+1,e1,e2-rlen,e2-1);
}
return root;
}
}