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
以便我可以使用多个结构并具有某种通用实现。有人可以帮我吗?
解决方案
b1
,b2
如果未找到树节点,则可能具有 NULL 值。
之后b1->name
可能是分段错误。
为什么不添加检查 NULL 在b1
, b2
?
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;
}