c - 在二叉树中搜索元素,函数总是返回0

标签 c binary-tree

我用 C 编写了以下函数,如果该元素确实在二叉树中,则返回 1,否则返回 0。

int isElementInBinaryTree(BinaryTreeNode *root, int search_item) {
if(root) {
    if(search_item == root -> data) return 1;
    isElementInBinaryTree(root -> left, search_item);
    isElementInBinaryTree(root -> right, search_item);
}

return 0;
}

首先,我输入函数来查看根是否存在,如果存在,我查看该根处的数据并将其与 search_item 进行比较。如果为真,我只需返回 1 并退出,否则我继续前序遍历。为什么我总是得到返回 0 无论如何?即使该项位于二叉树中?

最佳答案

您不使用对 isElementInBinaryTree 的递归调用的返回值。您必须将递归调用的结果传播到最顶层的调用。现在的情况是,只有当目标项位于根节点时才会返回 1。

所以:

int isElementInBinaryTree(BinaryTreeNode *root, int search_item)
{
    if(root) {
        if (search_item == root -> data) return 1;
        if (isElementInBinaryTree(root -> left, search_item)) return 1;
        if (isElementInBinaryTree(root -> right, search_item)) return 1;
    }

    return 0;
}

关于c - 在二叉树中搜索元素,函数总是返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36363432/

相关文章:

html - libxml 在空格处拆分文本节点

我可以使用单个 "pthread_mutexattr_t"属性来初始化两个不同的互斥量吗?

c - 如何从 JobObject 中分离进程

计算二叉搜索树中的比较次数

Java继承而不强制转换

algorithm - 给定两棵完全二叉树的层序遍历,如何判断一棵树是否是另一棵树的镜像?

c - 如何将通过函数传递的字符串分配给结构成员? C编程

c - c 中的数组和函数

c++ - 有人可以告诉我这是如何在 main() 中实现的吗? (关于void指针的问题)

java - 查找二叉树中两个节点之间的路径