class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
return traverse(inorder,0,inorder.size()-1,postorder,0,postorder.size()-1);
}
TreeNode* traverse(vector<int>& inorder, int in_start, int in_end,
vector<int>& postorder, int pos_start, int pos_end){
if(in_start>in_end) return nullptr;
int root_val = postorder[pos_end];
TreeNode* root = new TreeNode(root_val);
int size=0;
for(int i=in_start;i<=in_end;i++){
if(inorder[i]==root_val){
size = i-in_start;
break;
}
}
root->left = traverse(inorder,in_start,in_start+size-1,postorder,pos_start,pos_start+size-1);
root->right = traverse(inorder,in_start+size+1,in_end,postorder,pos_start+size,pos_end-1);
return root;
}
};
刷题记录第六十八天-从中序与后序遍历序列构造二叉树
最新推荐文章于 2024-06-23 10:36:46 发布