【问题标题】:Breadth First Search on a Binary tree二叉树上的广度优先搜索
【发布时间】:2011-12-22 17:33:12
【问题描述】:

我正在尝试使用他/她的 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);

}

【问题讨论】:

    标签: c++ binary-tree breadth-first-search


    【解决方案1】:
    char *temp;
    temp=strncpy(temp,q.front()->ID,8);
    

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

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

    以 C++ 方式做事要好得多:使用 std::string 并避免所有这些与 char 指针和空终止符混在一起的事情。

    【讨论】:

    • 我做到了,还是一样。但奇怪的是,当我搜索位于根右侧的 ID 号时,它工作得很好。当我尝试搜索根的左侧时发生错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多