LC.106 从中序和后序遍历序列构造二叉树
class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
return build(inorder,0,inorder.length - 1,postorder,0,postorder.length - 1);
}
public TreeNode build(int[] inorder,int instart,int inend,int[] postorder,int poststart,int postend ){
if(instart > inend){
return null;
}
int rootval = postorder[postend];
int index = 0;
for(int i = instart;i <= inend;i++){
if(inorder[i] == rootval){
index = i;
break;
}
}
int leftsize = index - instart;
TreeNode root = new TreeNode(rootval);
root.left = build(inorder,instart,index - 1,postorder,poststart,poststart + leftsize -1);
root.right = build(inorder,index + 1,inend,postorder,poststart + leftsize,postend - 1);
return root;
}
}