首页 > 解决方案 > 如何将指针返回到此二叉树中的特定节点?

问题描述

我有两种方法(布尔值和指针返回值)用于在 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以便我可以使用多个结构并具有某种通用实现。有人可以帮我吗?

标签: cpointersfindbinary-treenodes

解决方案


b1b2如果未找到树节点,则可能具有 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;
}

推荐阅读