gpt4 book ai didi

c++ - 二叉树上的广度优先搜索

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:41 24 4
gpt4 key购买 nike

我正在尝试遍历二叉树以使用他/她的 ID 号查找某人的 ID。当我调试这个函数时,它运行良好,但另一方面,当我直接运行时,它会自行终止。有人能解决这个问题吗?

struct person{
char ID[15];
char name[30] ;
char surname[30];
person *left;
person *right;
};

struct tree{
person *root;
void bfsSearch();
void BFS(person*,char*);
};

void tree::BFS(person *root,char *search)
//BFS traversal on a binary tree
{
char *temp;
std::deque<person *> q;
q.push_back(root);
temp=strncpy(temp,q.front()->ID,8);
while (q.size() != 0)
{
person *next = q.front();

if (strcmp(search,temp)==0)
{
cout<<"Result: "<<q.front()->ID<<endl;
break;
}
q.pop_front();

if (next->left)
q.push_back(next->sol);
if (next->right)
q.push_back(next->sag);
temp=strncpy(temp,q.front()->ID,8);
}
}

void tree::bfsSearch()
{
person *scan;
char *data,*temp;
data=new char[15];
scan=root;
cout<<"Enter the Person`s ID to search: ";cin>>data;
BFS(root,data);

}

最佳答案

char *temp;
temp=strncpy(temp,q.front()->ID,8);

您正在将数据复制到未初始化的指针中,这是未定义的行为。您需要申报 temp作为数组,或动态分配它。由于您最多只复制 8 个字节,因此使用 char temp[9];应该够了。请注意 strncpy如果输入太长,将保留未终止的字符串,因此您需要添加 temp[8]=0;为了安全。

分配 strncpy 的结果也没有意义返回temp ,因为它只返回它的第一个参数。

以 C++ 方式做事要好得多:使用 std::string并避免所有这些乱七八糟的事情 char指针和空终止符。

关于c++ - 二叉树上的广度优先搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com