我用 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/