广度优先搜索的定义
广度优先搜索BFS类似于树的层次遍历算法。基本思想是:首先访问顶点v,然后由v出发,依次访问v的各个未被访问过的顶点w1,w2,w3…wn。然后再访问wi(wi是w1,w2,w3…wn中的一个)未被访问过的邻接点。以此类推,直到所有的顶点都被访问过。BFS是一种分层查找的过程,每向前一步就访问一批顶点。不同于深度优先搜索那样有回退的情况。为了实现算法,需要借助于一个辅助队列并且以非递归的形式来实现。(来自网页)

559. Maximum Depth of N-ary Tree

思路:对于上面这棵树,BFS与DFS遍历节点顺序不同。
BFS: 1 3 2 4 5 6
DFS: 1. 3 5 6 2 4
代码

107. Binary Tree Level Order Traversal II

BFS使用queue实现非递归,是有一个模板的。

public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> levelTraversal = new ArrayList<List<Integer>>();Queue<TreeNode> queue = new LinkedList<TreeNode>();if(root!=null){queue.add(root);}while(!queue.isEmpty()){int size = queue.size();//长度List<Integer> level = new ArrayList<Integer>();for(int i=0;i<size;i++){//遍历本次元素TreeNode node = queue.poll();level.add(node.val);//做事情//添加子节点if(node.left!=null) queue.add(node.left);if(node.right!=null) queue.add(node.right);}levelTraversal.add(0,level);}return levelTraversal;}

这道题目也可以使用递归版,不过使用的有点勉强.

 public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> levelTraversal = new ArrayList<List<Integer>>();levelMaker(root, levelTraversal, 0);return levelTraversal;}private void levelMaker(TreeNode node, List<List<Integer>> result, int level) {if (node == null) return;if (result.size() <= level) {result.add(0, new ArrayList<Integer>());}result.get(result.size() - 1 - level).add(node.val);levelMaker(node.left, result, level + 1);levelMaker(node.right, result, level + 1);}

代码

Breadth-first Search(广度优先搜索)专题1相关推荐

  1. C++Breadth First Search 广度优先搜索(附完整源码)

    C++Breadth First Search 广度优先搜索的实现 C++Breadth First Search 广度优先搜索实现完整源码(定义,实现,main函数测试) C++Breadth Fi ...

  2. Breadth-first Search(广度优先搜索)专题2

    743. Network Delay Time 输入:int[][] times times[i]= new int[]{v,u,w} 表示从节点v到节点u需要时间w.注意这里是有向图. int N ...

  3. JavaScript实现breadth First Search广度优先搜索算法(附完整源码))

    JavaScript实现breadth First Search广度优先搜索算法(附完整源码) LinkedListNode.js完整源代码 Comparator.js完整源代码 LinkedList ...

  4. Depth-first Search深度优先搜索专题1

    104. Maximum Depth of Binary Tree 思路:顺着树的一个分支一直数层数直到叶子节点.DFS的思路.这个题目可以练习的是递归转迭代. 代码 695. Max Area of ...

  5. Depth-first Search深度优先搜索专题6

    472 Concatenated Words 思路:将词典使用Trie树表示.对于输入的词word,在Trie树上找,当遇到一个isWord=true的节点,查看剩下部分的词是否在词典中. 例如输入 ...

  6. Depth-first Search深度优先搜索专题4

    576. Out of Boundary Paths 思路:这道题目难倒了我.最直接的思路是暴力搜索.要注意的问题1是需要仔细观察Example2,轨迹不同意思是可以从A点到B点,再从B点到A点也可以 ...

  7. Depth-first Search深度优先搜索专题3

    473. Matchsticks to Square 思路:有n根长度不一的火柴,这些火柴可以拼接在一起,但不能被折断.这些火柴能够围城一个正方形吗?每个火柴可以并且必须使用一次.分析得到每个边的长度 ...

  8. Depth-first Search深度优先搜索专题2

    199. Binary Tree Right Side View 思路:想要得到树的每一层最右侧元素值,用BFS最方便.先访问左节点再访问右节点,最后访问的一个值就是留下的值. 想要DFS的思路也可以 ...

  9. Depth-first Search深度优先搜索专题7

    834 Sum of Distances in Tree 思路:一颗无向的树有N个节点,分别标记为0,1,2,-N-1,有若干条边.结果返回每个节点到其他节点的路径和. 以上面这棵树为例.从节点0到其 ...

最新文章

  1. Qt中的QPrintDialog
  2. 快速启动程序的工具软件都比不了Win+R-转
  3. 决策树-缺失值和连续值处理及属性划分
  4. Nginx系列~Nginx服务启动不了
  5. wegame每次登陆都要滑动验证_Vue项目中实现用户登录及token验证
  6. 【Python】PyCharm新建PythonPackage呈现出普通Dictionary的样式的解决方法
  7. 指纹图谱相似度评价软件_不同产地佛手指纹图谱及模式识别研究
  8. appbarlayout 折叠后 不允许滑动_还在纠结要不要建阳光房?看看可折叠阳光房,或许你就能做选择了...
  9. node 后台重定向_node.js – 使用NodeJS重定向客户端并重新定义
  10. 现在去做自动化测试开发了
  11. Android反射修改view,Android 修改viewpage滑动速度的实现代码
  12. WinAPI: midiOutSetVolume - 设置 MIDI 输出设备的音量
  13. 7款Java反编译工具
  14. Android Effect 解析
  15. 【2021-02】实时获取百度搜索词接口
  16. JS点击图片位置后增加点位
  17. 人脸检测-人脸对齐-人脸识别原理及方法
  18. QQ自定义表情巧收藏换了电脑照样用(转)
  19. 渗透测试-红队从资产收集到打点
  20. spring boot 引用 shiro 认证AD域

热门文章

  1. 生成n对括号的合法全排列
  2. JavaScript之常用方法讲解
  3. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加...
  4. 对PostgreSQL中后台进程内存挂载的初步学习
  5. Ubuntu11.04 3945ABG无线网卡驱动安装
  6. Google Maps 地址转化成坐标
  7. Windows SDK编程之一 窗口示例程序
  8. 富士通01018z平板电脑评测_档案扫描好帮手,富士通ix1500无线双面高速扫描仪评测...
  9. android+button+不可点击置灰,android:tint 给imagebutton着色 按钮灰色
  10. 中医移动医疗_中医之极简移动医疗