淮安品牌网站建设,3d网页游戏排行,一份简短的项目计划书,锦绣大地seo官网广度优先搜索的定义 广度优先搜索BFS类似于树的层次遍历算法。基本思想是#xff1a;首先访问顶点v#xff0c;然后由v出发#xff0c;依次访问v的各个未被访问过的顶点w1,w2,w3…wn。然后再访问wi(wi是w1,w2,w3…wn中的一个)未被访问过的邻接点。以此类推#xff0c;直到所…广度优先搜索的定义 广度优先搜索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 ListListInteger levelOrderBottom(TreeNode root) {ListListInteger levelTraversal new ArrayListListInteger();QueueTreeNode queue new LinkedListTreeNode();if(root!null){queue.add(root);}while(!queue.isEmpty()){int size queue.size();//长度ListInteger level new ArrayListInteger();for(int i0;isize;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 ListListInteger levelOrderBottom(TreeNode root) {ListListInteger levelTraversal new ArrayListListInteger();levelMaker(root, levelTraversal, 0);return levelTraversal;}private void levelMaker(TreeNode node, ListListInteger result, int level) {if (node null) return;if (result.size() level) {result.add(0, new ArrayListInteger());}result.get(result.size() - 1 - level).add(node.val);levelMaker(node.left, result, level 1);levelMaker(node.right, result, level 1);}代码