根據一棵樹的中序遍歷與後序遍歷構造二叉樹。
注意:
你可以假設樹中沒有重複的元素。
例如,給出
中序遍歷 inorder = [9,3,15,20,7]
後序遍歷 postorder = [9,15,7,20,3]
返回如下的二叉樹:
3
/ \
9 20
/ \
15 7
class Solution {
public:
TreeNode* buildTree(vector<int>& postorder,int s1, vector<int>& inorder,int s2, int len) {
if(len<=0)return NULL;
TreeNode *ans=new TreeNode;
ans->val=postorder[s1+len-1];
auto loc=find(inorder.begin()+s2,inorder.begin()+s2+len,postorder[s1+len-1]);
ans->left=buildTree(postorder,s1,inorder,s2,loc-inorder.begin()-s2);
ans->right=buildTree(postorder,loc-inorder.begin()-s2+s1,inorder,loc-inorder.begin()+1,len-(loc-inorder.begin()-s2)-1);
return ans;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
return buildTree(postorder,0,inorder,0,inorder.size());
}
};