解题思路
已知二叉树的中序遍历和后序遍历进行建树,可以用后序遍历的最后一个元素将中序遍历划分为左右子树的中序遍历,再对剩余的进行递归建树。
代码
class Solution {
public:
TreeNode *buildTree(vector<int> &inorder,vector<int> &postorder,int instart,int inend,int poststart,int postend){
if(instart > inend || poststart > postend)
return NULL;
TreeNode *res = new TreeNode(postorder[postend]);
int flag = 0;
for(int i = instart;i <= inend;i++){
if(inorder[i] == postorder[postend]){
flag = i;
break;
}
}
res->left = buildTree(inorder,postorder,instart,flag - 1,poststart,poststart + flag - instart - 1);
res->right = buildTree(inorder,postorder,flag + 1,inend,poststart + flag - instart,postend - 1);
return res;
}
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
return buildTree(inorder,postorder,0,inorder.size() - 1,0,postorder.size() - 1);
}
};