C 如何返回指向此二叉树中特定节点的指针?

C 如何返回指向此二叉树中特定节点的指针?,c,pointers,find,binary-tree,nodes,C,Pointers,Find,Binary Tree,Nodes,我有两种方法(布尔值和指针返回值)用于在C中的二叉树中搜索值: bool findInTree(BTNode*bt,char*str){ if(bt==NULL){ 返回false; } 如果(strcmp(((课程*)(bt->数据))->名称,str)==0){ 返回true; } bool b1=findInTree(bt->left,str); 如果(b1){ 返回true; } boolb2=findInTree(bt->右,str); 返回b2; } void*findandere

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

bool findInTree(BTNode*bt,char*str){
if(bt==NULL){
返回false;
}
如果(strcmp(((课程*)(bt->数据))->名称,str)==0){
返回true;
}
bool b1=findInTree(bt->left,str);
如果(b1){
返回true;
}
boolb2=findInTree(bt->右,str);
返回b2;
}
void*findandereturnintree(BTNode*bt,char*str){
if(bt==NULL){
返回(void*)空;
}
如果(strcmp(((课程*)(bt->数据))->名称,str)==0){
返回bt->数据;
}
void*b1=findAndReturnInTree(bt->left,str);
如果(strcmp(((课程*)(b1))->名称,str)==0){
返回b1;
}
void*b2=findandereturnintree(bt->right,str);
返回b2;
}

findInTree()。但是,
findAndReturnInTree()
不起作用,我不断地遇到分段错误。我试图对它进行建模,但返回的是指针而不是布尔值。顺便说一句,我使用
void
指针作为
->数据
,这样我就可以使用多个结构并具有某种通用实现。有人能帮我一下吗?

b1
b2
如果找不到树节点,可能会有空值。
thant
b1->name
之后可能是分段错误

为什么不在
b1
b2

处添加检查NULL C程序员总是检查异常情况

void*findandereturnintree(BTNode*bt,char*str){
if(bt==NULL){
返回(void*)空;
}
如果(strcmp(((课程*)(bt->数据))->名称,str)==0){
返回bt->数据;
}
void*b1=findAndReturnInTree(bt->left,str);
if(b1==NULL)返回findReturnIntree(bt->right,str);
如果(strcmp(((课程*)(b1))->名称,str)==0){
返回b1;
}
void*b2=findandereturnintree(bt->right,str);
返回b2;
}

使用调试器。至少为您自己和发布,因此您应该使用调试器找出触发seg故障的确切代码行。然后继续使用调试器跟踪代码。这看起来像是个问题:
if(strcmp(((课程*)(b1))->name,str)
b1
值来自可以返回NULL的
findandretunitree
。因此,在取消引用之前,应该检查
b1
是否为
NULL
。同样,调试器会立即将您指向该行,并向您显示
b1
NULL
。不要认为添加
返回
有qui是的。仍然需要继续搜索
bt->right