#includeiostream#includevector#includealgorithmusing namespace std;struct node char val; node l; node r; nodechar x valx lNULL rNULL ;node buildvectorchar&middlevectorchar&post ifmiddleemptypostempt
在代码的build函数中,有一个错误的地方是在for循环中,index变量没有进行初始化,导致在使用index时会出现未定义的行为,可能会导致segmentation fault错误。
正确的写法应该是将index变量初始化为0,如下所示:
int index = 0;
for(int i=0;i<middle.size();i++){
if(middle[i]==rootchar) {
index = i;
break;
}
}
另外,代码中还存在一个问题,即在使用middle[index]进行比较时,应该使用middle[i]进行比较。
修改后的代码如下所示:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
char val;
node *l;
node *r;
node(char x) : val(x), l(NULL), r(NULL){
}
};
node* build(vector<char>&middle,vector<char>&post){
if(middle.empty()||post.empty()){
return 0;
}
char rootchar=post.back();
node *root=new node(rootchar);
if(post.size()==1){
return root;
}
int index = 0;
for(int i=0;i<middle.size();i++){
if(middle[i]==rootchar) {
index = i;
break;
}
}
vector<char>lfm(middle.begin(),middle.begin()+index);
vector<char>rfm(middle.begin()+index+1,middle.end());
vector<char> lp(post.begin(),post.begin()+lfm.size());
vector<char> rp(post.begin()+lfm.size(),post.end()-1);
root->l=build(lfm,lp);
root->r=build(rfm,rp);
return root;
}
void traversal(node* root) {
if (root == NULL) return;
cout << root->val;
traversal(root->l);
traversal(root->r);
}
int main(){
vector<char>m;
vector<char>p;
node *res;
string a;
string b;
cin>>a>>b;
for(int i=0;i<a.length();i++){
m.push_back(a.at(i));
p.push_back(b.at(i));
}
res=build(m,p);
traversal(res);
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/hRar 著作权归作者所有。请勿转载和采集!