【发布时间】:2021-04-06 11:57:42
【问题描述】:
typedef struct Tree{
int value;
struct Tree* leftNode;
struct Tree* rightNode;
}Tree;
Tree* Is_Existing_Number(Tree *root, int number, bool found) {
if (!root || found)
return root;
if (root->value == number)
found = true;
else {
Is_Existing_Number(root->leftNode, number, found);
Is_Existing_Number(root->rightNode, number, found);
}
}
我有一个问题:我想查找一棵树中是否有特定的数字。如果是这样,我希望函数返回一个指向它的指针,所以基本上我想遍历整个树并检查树中是否存在该数字。
为什么这段代码不起作用?
【问题讨论】:
-
你的
else子句如果不为null,则需要返回搜索左节点的值;否则,它需要通过搜索正确的节点返回值。 -
btw.. 如果在查找值时访问了两个分支,那么使用 BST 的目的是什么?
-
您的代码假设您有一个二叉树,而不是二叉搜索树。如果你有一棵二叉搜索树,那么如果当前节点不包含你要的值,你就知道是看左子树(因为寻找的值小于当前节点)还是右子树(因为寻求的价值更大)。这减少了所需的搜索量。您还需要为
if (root->value == number)情况返回一个值(return root;— 无需设置found)。确实,您根本不需要found。
标签: c recursion binary-tree binary-search-tree