Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode buildTree(int[] inorder, int s1, int end1, int[] postorder, int s2, int end2){
if(end1 < 0 || end2 < 0 || s1 > end1 || s2 > end2) return null;
int root = postorder[end2];
int i, k;
for(i=s1; i<=end1 && inorder[i]!=root; i++);
k = i - s1;//节点移动数
TreeNode left = buildTree(inorder, s1, i-1, postorder, s2, s2 + k - 1);
TreeNode right = buildTree(inorder, i+1, end1, postorder, s2+k, end2-1);
TreeNode p = new TreeNode(root);
p.left =left;
p.right = right;
return p;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
return buildTree(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1);
}
}