我正在尝试在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),这个条件会再次被检查吗?
我感觉自己错过了大多数人都知道的显而易见的东西。任何帮助都将不胜感激!