class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return traverse(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1);
}
TreeNode* traverse(vector<int>& preorder, int pre_start, int pre_end,
vector<int>& inorder, int in_start, int in_end){
if(pre_start>pre_end) return nullptr;
int node_val = preorder[pre_start];
TreeNode* root = new TreeNode(node_val);
int size = 0;
for(int i=in_start;i<=in_end;i++){
if(inorder[i]==node_val){
size=i-in_start;
break;
}
}
root->left = traverse(preorder,pre_start+1,pre_start+size,
inorder,in_start,in_start+size-1);
root->right = traverse(preorder,pre_start+size+1,pre_end,
inorder,in_start+size+1,in_end);
return root;
}
};
刷题记录第六十七天-从前序与中序遍历序列构造二叉树
最新推荐文章于 2024-07-22 22:47:14 发布