在代码的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;    
}
``
#includeiostream#includevector#includealgorithmusing namespace std;struct node	char val;	node l;	node r;	nodechar x valx lNULL rNULL	;node buildvectorchar&middlevectorchar&post		ifmiddleemptypostempt

原文地址: https://www.cveoy.top/t/topic/hRar 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录