【发布时间】:2019-04-24 06:52:57
【问题描述】:
我有一个实现二叉搜索树的类,我的私有方法之一是方法bool find(Node<Key, Info> * &node, Key _key);,其中node 代表指向节点的指针,我们开始搜索,_key 代表每个节点的唯一值钥匙。
我的方法实现如下:
template<typename Key, typename Info>
bool BST<Key, Info>::find(Node<Key, Info>* &node, Key _key)
{
if (node)
{
if (node->key == _key)
{
return true;
}
else
{
find(node->left, _key);
find(node->right, _key);
return false;
}
}
else return false;
}
并且它不会返回 true,即使具有给定键的元素存在。我在 return 语句之前添加了一个打印命令,它执行了,所以我的函数似乎找到了给定的节点,但我想我的理解是错误的,它仍然以某种方式返回 false。
已解决
我的问题似乎找到了解决办法:)
template<typename Key, typename Info>
bool BST<Key, Info>::find(Node<Key, Info>* &node, Key _key)
{
if (node)
{
if (node->key == _key)
{
return true;
}
else if(_key<node->key)
return find(node->left, _key);
else
return find(node->right, _key);
}
else return false;
}
【问题讨论】:
-
为什么在你的
else分支中忽略find的结果?尝试在一些简单的示例中逻辑地遵循您的代码。 -
请将您的解决方案转移到自己的答案中,谢谢。
标签: c++ recursion tree binary-search-tree