多叉树的宽度优先搜索BFS
2012-06-01 20:18
323 查看
首先,选择一个合适的数据结构存储多叉树,我使用了“左孩子右兄弟”的方法,使用二叉树来存储多叉树,便于实现和遍历。
其次,宽度优先搜索时:
1.用队列(先进先出)保存遍历路径。
2.搜索顺序:对节点A,先访问节点的左节点(第一个孩子节点),从该左节点开始一直向右遍历直到最右叶子节点(所有兄弟节点),此时遍历完A的所有直接孩子。遍历的同时,节点入队列。
3.遍历完A的孩子后,取队列中的下一个节点,继续遍历其孩子节点。直到队列为空。
代码用C++实现,省略了类Queue, Node的实现
其次,宽度优先搜索时:
1.用队列(先进先出)保存遍历路径。
2.搜索顺序:对节点A,先访问节点的左节点(第一个孩子节点),从该左节点开始一直向右遍历直到最右叶子节点(所有兄弟节点),此时遍历完A的所有直接孩子。遍历的同时,节点入队列。
3.遍历完A的孩子后,取队列中的下一个节点,继续遍历其孩子节点。直到队列为空。
代码用C++实现,省略了类Queue, Node的实现
class Tree { public: Node *root; Tree() { root=NULL; } void BFS() { Queue *queue=new Queue(); Node *p=root; if(p == NULL) return; //首先打印根节点 printf("%d\t",p->data); //第一个孩子节点 p = p->left; while(p != NULL) { //p打印,并入栈 queue->push(p); printf("%d\t",p->data); //如果有右孩子,一直入栈 p=p->right; while(p!= NULL) { queue->push(p); printf("%d\t",p->data); p=p->right; } p=(Node *)queue->getFront(); if(p == NULL) break; //从队列中取出下一个节点,访问它的所有孩子节点 queue->pop(); p=p->left; } } };
相关文章推荐
- 【算法入门】广度/宽度优先搜索(BFS)
- 宽度优先搜索BFS
- 广度/宽度优先搜索(BFS)详解
- [LeetCode 403]Frog Jump (宽度优先搜索BFS)
- POJ 3626 Mud Puddles 练习 BFS 宽度优先搜索
- 【算法入门】广度/宽度优先搜索(BFS)
- 宽度优先搜索(BFS)
- POJ 3626 Mud Puddles 练习 BFS 宽度优先搜索
- BFS 宽度优先搜索 算法摘记
- 广度/宽度优先搜索(BFS)
- 宽度优先搜索(BFS)
- BFS宽度优先搜索思想
- Prime Path - POJ 3126 BFS宽度(广度)优先搜索
- 【算法入门】广度/宽度优先搜索(BFS)
- 广度/宽度优先搜索(BFS)
- 广度/宽度优先搜索(BFS)
- 算法学习笔记10-BFS宽度优先搜索
- 宽度优先搜索(BFS):POJ3669--Meteor Shower
- 图论(四)宽度优先搜索BFS
- bfs走迷宫宽度优先搜索