```
public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder.length == 0 || inorder.length != postorder.length) return null;
return buildTree(inorder,postorder,0,inorder.length-1,0,postorder.length-1);
}
public TreeNode buildTree(int[] inorder, int[]postorder, int ilow, int ihigh, int plow, int phigh) {
TreeNode root = new TreeNode(postorder[phigh]);
int i=-1;
for(i = ilow; i <= ihigh; i++) {
if(root.val == inorder[i]) {
break;
}
}
if(i != ilow) root.left = buildTree(inorder, postorder, ilow, i-1, plow,plow+i-ilow-1);
if(i != ihigh) root.right = buildTree(inorder,postorder, i+1, ihigh, plow+i-ilow, phigh-1);
return root;
}
```