广度对二进制搜索树的首次搜索
Breadth First Search of Binary Search Tree
我正在尝试为二进制搜索树制作广度的第一个搜索功能,但是我似乎无法使其正常工作。任何指针都将不胜感激!
template <class T>
bool BST<T>::displayBfs(T searchKey, BST<T> *node)
{
BST<T> *tmp = node;
queue <int> queue;
queue.push(node->mData);
if (node == NULL)
{
return false;
}
while (!queue.empty())
{
queue.pop();
if (tmp->mData == searchKey)
return true;
else
{
if(tmp->mLeft != NULL)
queue.push(tmp->mLeft->mData);
if(tmp->mRight != NULL)
queue.push(tmp->mRight->mData);
}
}
return false;
}
由于BST<T>
节点具有有关其孩子的信息,因此您必须将它们放在队列上,而不是像您一样的值。另一件事是,在弹出之前,您不会从queue
获取元素。最后,由于std::queue
,您必须为您的队列提供其他名称,我假设您正在使用。
尝试以这种方式重写您的BFS:
template <class T>
bool BST<T>::displayBfs(T searchKey, BST<T> *node)
{
if (node == NULL) return false;
queue<BST<T>*> q;
q.push(node);
while (!q.empty())
{
BST<T>* tmp = q.front();
q.pop();
if (tmp->mData == searchKey)
return true;
else
{
if(tmp->mLeft != NULL)
q.push(tmp->mLeft);
if(tmp->mRight != NULL)
q.push(tmp->mRight);
}
}
return false;
}
几件事:
node == NULL
的测试应在您访问节点之前进行:
if (node == NULL)
return false;
queue.push(node);
您的队列也应为节点类型,您应该在队列中插入节点:
队列*>队列;
最后,您无法访问脱离元素,您需要使用队列类的front
方法在调用POP之前访问前元素。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 正在尝试重载二进制搜索树分配运算符
- 使用C++创建特殊的二叉搜索树
- 在递归二叉搜索树中搜索
- 在二叉搜索树中插入时出现分段错误
- 在树结构.txt文件中搜索节点
- C++二叉搜索树模板从函数返回节点
- 我可以在没有堆栈的情况下在二叉搜索树中实现迭代器吗?
- 在二叉搜索树C++中计算平均值
- 在字符串的二叉搜索树中搜索子字符串 - C++
- 在二叉搜索树中插入新元素
- 如何打印在二叉搜索树中找到的数据?
- 防弹站树搜索功能C++
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 这是一个二叉搜索树吗?黑客排名问题
- 二叉搜索树 - 实现"search"函数
- 从文件搜索搜索单词,然后将整个行复制到另一个文件
- 插入和搜索细分树
- 搜索RB树中的特定节点
- 使用二叉搜索搜索向量的上限