此函数应将指针返回具有key值的节点,但应循环遍历这些值,直到达到key的值为止,然后返回NULL。我不确定为什么。
BST_Node *BST_search(BST_Node *root, int bar, double index){
if (root==NULL){
return root;
}
double queryKey=(10.0*bar)+index;
if (queryKey==((10.0*root->bar)+root->index)){
return root;
}
if (queryKey<((10.0*root->bar)+root->index)){
return BST_search(root->left, bar, index);
}
else if (queryKey>((10.0*root->bar)+root->index)){
return BST_search(root->right, bar, index);
}
}
感谢您的帮助。
答案 0 :(得分:0)
我认为@bruceg正确地暗示了为什么您总是收到null。浮点比较查找完全相等可能会失败。
尝试这些修改:
// Your tolerance for equality, may need to adjust depending your use-case
#define EPSILON 0.0000001
BST_Node *BST_search(BST_Node *root, int bar, double index){
if (root==NULL){
return NULL;
}
double queryKey= 10.0*bar+index; // consider passing this as parameter to avoid recomputing on every call
double rootKey = 10.0*root->bar+root->index;
if (queryKey<(rootKey - EPSILON )){
return BST_search(root->left, bar, index);
}
if (queryKey>(rootKey + EPSILON)) {
return BST_search(root->right, bar, index);
}
// Equality is assumed if we reach this code
return root;
}