529 Minesweeper

输入:一个二维矩阵,一些修改规则。
 如果点到一个隐藏的地雷M,把它改为X,游戏结束
 如果点到一个E,且其周围8邻接的范围没有地雷,那么应该把8邻接的范围的格子全部翻开为E
 如果翻开的格子的八邻接范围有隐藏的地雷,就将其标注了地雷的数目1-8而非E。(规则拷贝链接)

输出:扫雷后的矩阵。
分析:从第二条规则可以看到这是需要迭代递归的。递归过程可以从一个节点开始,不断查找邻接点,扩展下去,也可以沿着节点一层一层扩展下去。前者是DFS,后者是BFS。和前面的几道题目是一样的。
这个题目的难点1是英语问题,没有理解 If an empty square (‘E’) with no adjacent mines is revealed, then change it to revealed blank (‘B’) and all of its adjacent unrevealed squares should be revealed recursively。 难点2 是计算邻接点坐标变化的change数组。知道8个方向上xy坐标值得变化。
 看代码会发现,依然使用的是BFS的模板。有了套路真好。有时间再回头看看DFS的套路。整个做完DFS并没有目前对BFS的套路感觉。
代码

102. Binary Tree Level Order Traversal

我认为不值得再写个新文章。如果从BFS的习题练习到这里,大概已经形成思路。套用即可。最近在用idea写LeetCode的代码。我认为idea就是开发工具界的搜狗输入法。好用,好用,真好用。
代码

199. Binary Tree Right Side View

输入:二叉树
输出:从右边站着看二叉树,从上到下得到的值。
分析:这与102比较,102要求记下一层中的每一个节点的值,199要求记录下一层中最右边节点的值。用BFS思路的话,只要把上一题的代码拷贝过来,改改即可。用DFS思路的话,也是拷贝上一题的代码,改改就能跑起来。如果能先遍历左节点,每层只调用一次list的add方法,速度会更快。
代码

863. All Nodes Distance K in Binary Tree

输入:二叉树,目标节点,距离K
输出:所有距离目标节点距离K路径的节点值列表
思路1:

首先找到根节点距离target node 的距离 rootDistance;
其次,存储所有节点与父节点的map
最后,一个节点距离目标节点的距离t = 其父节点距离目标的节点 + 1
假设dist[i] 表示值为i的节点距离目标节点的距离。dist[3]=1,dist[5]=0,dist[1]=dist[3]+1,dist[2]=dist[5]+1。考虑到这里,我就认为dist[node]=dist[node.parent]+1.假设在node3和node5之间加一个节点node9,实际dist[9]=1,按照公式dist[9]=dist[3]+1.不正确。
这种通过一两个节点(特例)来总结规律的情况,需要考虑全所有的情况。

纠正思路1:
1 树的遍历不一定非要从跟节点开始
2 直观地看。如果target 在一个节点的左子树,距离为dist,则这个节点的右子树上距离为K-dist的节点都符合要求。当然,target节点子树上再遍历K层的元素也符合要求。例如目标节点是6,K=2。节点5与节点6距离为1,那么节点5的右子树上,与节点5距离为K-1=1的节点符合要求。节点6距离节点3的距离为2,节点3符合要求。当然对于节点6的子节点,距离为K的子节点也符合要求。
3 如果 target在右子树上,情形也是一样的。
这道题目最好不要看做树,而是看做图。因为当看做树的时候会更多的去考虑父子关系和父子节点。如果看做图,则所有节点地位相同。
代码方法:distanceKV2

思路2:
1 存储所有节点与父节点的map。
2 将node5加入到队列。dist=0。
3如果dist<K, 弹出队列所有元素,将每个元素的子节点,父节点加入到队列。dist++。调回2。
4如果dist=K,弹出队列所有元素,将元素值放入list中,作为结果集。
做的过程中会发现有重复处理的元素,不合理的结果。这时候用一个set,在加入到队列之前,判断一下是否已经处理过。
代码方法:distanceK
代码

【Breadth-first Search 】专题3相关推荐

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

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

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

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

  3. 树上的BFS(Tree Breadth First Search)

    Pattern: Tree Breadth First Search,树上的BFS 介绍来自链接:https://www.zhihu.com/question/36738189/answer/9086 ...

  4. DFS(Depth First Search,深度优先搜索)与BFS(Breadth First Search,广度优先搜索)总结与思考

    目录 Depth First Search(dfs) 代码(递归) 代码(非递归) Breadth First Search(bfs) 代码 比较 数据结构 时间复杂度 使用 例题:岛的个数 dfs实 ...

  5. 数据结构与算法(python):广度优先搜索(Breadth First Search,BFS)和深度优先算法(Depth First Search,DFS)

    参考自 MOOC数据结构与算法Python版 目录 一.广度优先搜索 1.1 BFS算法过程 1.2 广度优先搜索算法分析 二.深度优先搜索 2.1 骑士周游 2.1.1 问题定义 2.1.2 构建骑 ...

  6. 图的遍历——广度优先搜索(Breadth First Search)

    2019独角兽企业重金招聘Python工程师标准>>> 1.广度优先搜索遍历类似于树的按层次遍历的过程. 假设从图中某顶点V出发,在访问了V之后依次访问V的各个未曾访问过得邻接点,然 ...

  7. BFS——广度优先算法(Breadth First Search)

    1.前言 这几天刷leetcode经常碰到DFS BFS的问题,之前一直也是模棱两可,凭着感觉做,是需要总结一下了. 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历 ...

  8. 深度优先搜索(Depth First Search)、广度优先搜索(Breadth First Search)

    DFS: /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visited[]为全局变 ...

  9. [Tree Breadth First Search] 二叉树的最大深度

    leetcode 104.Maximum Depth of Binary Tree.难度easy 0. 题干 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. ...

  10. 广度优先搜索(Breadth First Search)

    广度优先搜索简称BFS,是一种以"广度"为第一关键词的算法,当碰到岔道口时,总是优先考虑从该岔道口能直接到达的所有节点,以此类推,直到所有节点都被访问位置,类似于掉入水面的石子,激 ...

最新文章

  1. Coding-字符串
  2. 分布式系统中一些主要的副本更新策略——Dynamo/Cassandra/Riak同时采取了主从式更新的同步+异步类型,以及任意节点更新的策略。...
  3. [原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)
  4. 关于 Hibernate 中的“脏数据”、“脏对象”
  5. html5触摸事件判断滑动方向,H5触摸事件中如何判断用户滑动方向
  6. 代码审计之CVE-2017-6920 Drupal远程代码执行漏洞学习
  7. Spring+Hibernate 零散知识点
  8. RabbitMQ服务的安装与使用
  9. 没想到曾经排名第一的安全软件,如今变成无法卸载的流氓~
  10. SpringBoot--访问静态页面
  11. MacBook进水记
  12. 数据结构-算法题分享1
  13. 专访阿里视频云叔度:一场技术人的自我修行
  14. 浙里办完整开发流程(仅前端)
  15. 进销存到底是什么意思?进销存软件有什么作用?
  16. pagehelper mybatis yml文件配置
  17. Windows GDI+ 详解
  18. 如何搞垮一个测试团队?
  19. 【颜纠日记】优化办公整理,传授效率整理术
  20. ue4中隐藏灯光和相机图标_UE4中的光线追踪和SSGI照明研究

热门文章

  1. ※交换排序(1)——快速排序(quick sort)
  2. 软件工程概论个人作业02(四则运算2)
  3. 洛谷P3392 涂国旗
  4. 酒厂选址(codevs 1507)
  5. Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?
  6. WebApp基础01-设置读取assets目录下文件
  7. 360发布穿戴设备“儿童卫士”手环
  8. QQ技术攻略-原来隐藏着这么多秘密(上)
  9. php求数组交集的自定义函数,php数组交集函数
  10. eclipse Maven项目发布到Tomcat下classes文件夹却没有子模块的编译类