c-如何将指针返回到这个二进制树中的特定节点



我有两种方法(布尔值和指针返回值(用于在C:中的二进制树中搜索值

bool findInTree(BTNode* bt, char* str) {
if (bt == NULL) {
return false;
}
if (strcmp(((Course*) (bt->data))->name, str) == 0) {
return true;
}
bool b1 = findInTree(bt->left, str);
if (b1) {
return true;
}
bool b2 = findInTree(bt->right, str);
return b2;
}
void* findAndReturnInTree(BTNode* bt, char* str) {
if (bt == NULL) {
return (void*) NULL;
}
if (strcmp(((Course*) (bt->data))->name, str) == 0) {
return bt->data;
}
void* b1 = findAndReturnInTree(bt->left, str);
if (strcmp(((Course*) (b1))->name, str) == 0) {
return b1;
}
void* b2 = findAndReturnInTree(bt->right, str);
return b2;
}

findInTree()运行完全正常,并根据该值是否在树中返回正确的布尔值。然而,findAndReturnInTree()不起作用,我不断地遇到分割错误。我试图用findInTree()对它进行建模,但返回了一个指针而不是布尔值。顺便说一句,我使用void指针作为->data,这样我就可以使用多个结构并具有某种通用实现。有人能帮我做这个吗?

如果未找到树节点,则b1b2的值可能为NULL
b1->name之后可能是分段故障。

为什么不在b1b2添加以检查NULL
C程序员总是检查异常情况。

void* findAndReturnInTree(BTNode* bt, char* str) {
if (bt == NULL) {
return (void*) NULL;
}
if (strcmp(((Course*) (bt->data))->name, str) == 0) {
return bt->data;
}
void* b1 = findAndReturnInTree(bt->left, str);
if (b1 == NULL) return findAndReturnInTree(bt->right, str);
if (strcmp(((Course*) (b1))->name, str) == 0) {
return b1;
}
void* b2 = findAndReturnInTree(bt->right, str);
return b2;
}

最新更新