我如何 return 指向此二叉树中特定节点的指针?

How can I return the pointer to a specific node in this Binary Tree?

我有两种方法(布尔值和指针 return 值)用于在 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() 工作得很好,并且 return 根据该值是否在树中来计算正确的布尔值。但是,findAndReturnInTree() 不起作用,我不断收到分段错误。我试图根据 findInTree() 对其进行建模,但 return 使用指针而不是布尔值。顺便说一句,我将 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;
}