我正在尝试编写二叉树中广度优先搜索的代码。我已将所有数据存储在队列中,但我不知道如何访问所有节点并消耗它们的所有子节点。
这是我的 C 代码:
void breadthFirstSearch (btree *bt, queue **q) {
if (bt != NULL) {
//store the data to queue if there is
if (bt->left != NULL) enqueue (q, bt->left->data);
if (bt->right != NULL) enqueue (q, bt->right->data);
//recursive
if (bt->left != NULL) breadthFirstSearch (bt->left, q);
if (bt->right != NULL) breadthFirstSearch (bt->right, q);
}
}
我已经将根数据排入队列,但它仍然不起作用。
有人能指出我的错误吗?
BFS 可以轻松编写,无需递归。只需使用队列来订购扩展:
void BFS(btree *start)
{
std::deque<btree *> q;
q.push_back(start);
while (q.size() != 0)
{
btree *next = q.front();
// you may want to print the current node here or do other processing
q.pop_front();
if (next->left)
q.push_back(next->left);
if (next->right)
q.push_back(next->right);
}
}
关键是你不需要递归地遍历这棵树;您只需让数据结构处理您访问节点的顺序即可。
请注意,我在这里使用的是 C++ 双端队列,但是任何可以让您将项目放在后面并从前面获取它们的东西都可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)