【发布时间】:2018-09-02 07:31:29
【问题描述】:
我正在创建一个包含二叉搜索树算法的程序,但我遇到了一个不知道如何解决的问题。这是我的代码的相关部分。
struct node {
string data;
node *left = NULL;
node *right = NULL;
};
这就是我的节点结构。
void Insert_Rec(string word, node* ptr) {
if (ptr->data == "") {
ptr->data = word;
ptr->left = NULL;
ptr->right = NULL;
cout << "overwitten!" << endl;
}
else if (word < ptr->data) {
if (ptr->left != NULL) {
cout << "Recursing left!";
Insert_Rec(word, ptr->left);
}
else {
ptr->data = word;
ptr->left = NULL;
ptr->right = NULL;
cout << "Inserted!";
}
}
问题就出在这里,程序永远不会进入 if(ptr->left != NULL) 语句。查看我的 Visual Studio 调试器,ptr->left 显示“”而不是 NULL。我该如何解决这个问题!?我在这里尝试了其他一些解决方案,但它们要么不相关,要么根本不起作用!!
【问题讨论】:
-
您应该在取消引用指针之前检查
nullptr。 -
解决方案将使用调试器逐行逐步执行代码,查看all 变量,并将它们与您的期望进行比较。
-
为了让程序采用
(ptr->left != NULL)分支,您必须在某处将ptr->left设置为NULL 以外的值。你永远不会这样做。 -
您是否在某处为
ptr->left分配了非空值?您应该显示完整的代码。 -
我建议使用
std::string::empty而不是与“”比较。
标签: c++ string pointers binary-search-tree