编辑:以下问题已解决。但是,我有一个后续问题。有时我的教授在进行递归调用时不会返回。我怎么知道何时应该返回递归调用与何时应该只递归调用函数?
我正在编写一个递归函数,以查看二进制搜索树是否包含某个键。将显示短语“键匹配包含”,因此找到了键,但是函数仍返回false。我注意到无论何时搜索左子树,它都会返回false。对出什么问题有任何想法吗?预先谢谢你。
内部方法:
template <typename K>
bool Multiset<K>::Contains(std::unique_ptr<Node> &n, const K &key) {
if (!n) {
std::cout << "Contains returns null" << std::endl;
return false;
}
if (n->key == key) {
std::cout << "Key match Contains" << std::endl;
return true;
} else if (key < n->key) {
Contains(n->left, key);
}
return Contains(n->right, key);
}
外部方法:
template <typename K>
bool Multiset<K>::Contains(const K &key) {
return Contains(root, key);
}
答案 0 :(得分:0)
您将搜索结果放在该部分中:
Contains(n->left, key);
例如,应该这样:
if (Contains(n->left, key)) return true;
答案 1 :(得分:0)
您需要放置return Contains(n->left, key);
而不是Contains(n->left, key);