Given inorder and postorder traversal of a tree, construct the binary tree.
根据中根遍历和后跟遍历,求二叉树。
class Solution {
public:
TreeNode *createTree(vector<int>&in,int l1,int r1,vector<int>&post,int l2,int r2){
if(l1>r1)return NULL;
int len1,root=post[r2];
for(int i=l1;i<=r1;i++){
if(in[i]==root){
len1=i-l1;
break;
}
}
TreeNode *q=new TreeNode(root);
q->left=createTree(in,l1,l1+len1-1,post,l2,l2+len1-1);
q->right=createTree(in,l1+len1+1,r1,post,l2+len1,r2-1);
return q;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
if (inorder.size() == 0) return NULL;
TreeNode *head = createTree(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1);
return head;
}
};