【发布时间】:2017-04-03 21:33:15
【问题描述】:
我正在尝试在 C 中创建二叉搜索树。
我已经弄清楚了大部分的部分,但是即使我完成了任务,有一件事仍然困扰着我。
这是搜索功能,它应该与节点的数据一起返回(在这种情况下为temp->data)。
但是,当我写出如下代码时,它一直给我错误:
char bst_search(int key){
tree_pointer temp = root;
while(temp != NULL){
if(temp->key < key){ // navigate down the tree
temp = temp->right;
} else temp = temp->left;
if(temp->key == key){
return temp->data;
}
}
return NULL;
}
当键不在二叉树中(因此应返回 NULL)并不断崩溃时,此函数失败。在尝试了几种可能性之后,我意识到将键检查移到 while 循环的前面部分解决了这个问题。
char bst_search(int key){
tree_pointer temp = root;
while(temp != NULL){
if(temp->key == key){
return temp->data;
}
if(temp->key < key){ // navigate down the tree
temp = temp->right;
} else temp = temp->left;
}
return NULL;
}
我很好奇,当循环条件 (temp) 中的变量在其循环的主体代码中被修改时(因为 temp 已更改为 temp->left 或 temp->right),是否再次检查条件?
我觉得我错过了一些对你们大多数人来说很明显的东西。任何帮助表示赞赏!
【问题讨论】:
标签: c data-structures binary-search-tree dev-c++