class Solution {
public:
TreeNode* constructFromPrePost(vector<int>& preorder, vector<int>& postorder) {
return traverse(preorder,0,preorder.size()-1,postorder,0,postorder.size()-1);
}
TreeNode* traverse(vector<int>& preorder, int pre_start, int pre_end,
vector<int>& postorder, int pos_start, int pos_end){
if(pre_start>pre_end) return nullptr;
int root_val = preorder[pre_start];
TreeNode* root = new TreeNode(root_val);
if(pre_start==pre_end) return root;
int right_root = postorder[pos_end-1];
int left_size = 0;
for(int i=pre_start+1;i<=pre_end;i++){
if(preorder[i]==right_root){
left_size = i-pre_start-1;
break;
}
}
root->left = traverse(preorder,pre_start+1,pre_start+left_size,postorder,pos_start,pos_start+left_size-1);
root->right = traverse(preorder,pre_start+left_size+1,pre_end,postorder,pos_start+left_size,pos_end-1);
return root;
}
};
刷题记录第六十九天-从前序与后序遍历序列构造二叉树
最新推荐文章于 2024-06-23 10:36:46 发布
![](https://img-home.csdnimg.cn/images/20240611030827.png)