首页 > 其他 > 详细

BFS

时间:2020-08-06 14:59:13      阅读:80      评论:0      收藏:0      [点我收藏+]

大纲:

二叉树上的宽度搜索

图上的宽度搜索

  拓扑排序

棋盘上的宽度搜索

什么时候使用宽度优先搜索呢?

图的遍历

  层级遍历

  由点及面

  拓扑排序

最短路径

  仅限简单图求最短路径:即图中每条边长度都是1,并且没有方向。

如果题目问最短路径,那么除了BFS还可能是什么算法呢?如果是问最长路径呢?

答:那么就是动态规划算法。如果是最长路径,那么就可能是DFS和DP。

二叉树上的宽度优先搜索

图的遍历(层级遍历)

注:树是图的一种特殊形态,树属于图。

 技术分享图片

在这里简单介绍一下,BFS算法结束的条件

 

技术分享图片

class Solution{
    public:
        vector<vector<int>> levelorder(TreeNode root){
            vector<vector<iny>>* result = new vector<vector<int>>();
            if(root == NULL)
            {
                return result;
            }
            
            //声明一个队列queue
            //因为队列中不断出队和入队的是树的结点
            //所以数据元素是TreeNode
            //和vector一样,均采用模板类实现,所以在实例化的时候需要加入数据类型
            queue<TreeNode>* queue = new queue<TreeNode>();
            queue->push(root);
            
            //当最后一个结点结束后,队列中所有元素被弹出
            //此时queue为空
            while(!queue->empty())
            {
                //用于存放本层的数值元素
                vector<int>* level = new vector<int>();
                int size = queue->size();
                for(int i = 0; i < size; i++)
                {
                    TreeNode head = queue->front();
                    queue->pop();
                    level->push_back(head.val);
                    if(head.left != NULL)
                    {
                        queue->push_back(head.left);
                    }
                    if(head.right != NULL)
                    {
                        queue->push_back(head.right);
                    }
                }
                result->push_back(level);
                //释放前面生成的空间
                delete[];
            }
            
            return result;
        }    
}

 

 

 

上面代码中可能会出现错误,但是思路是这样,需要微调

上面代码中声明了两个vector容器和一个queue队列

vector容器的result是用来存放层级遍历的最终结果,level是当层级遍历到某一层时用来存储该层的遍历结果,待该层遍历结束时,将此level添加到result中,形成最后的结果

 

BFS

原文:https://www.cnblogs.com/hxhlrq/p/13444615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!