Breadth First Search
USC_ECE
这个作者很懒,什么都没留下…
展开
-
JZ22 从上往下打印二叉树
这道题就是经典的BFS。需要注意的两点是当root == null的时候直接返回空ArrayList,还有就是向队列里添加左右子节点是需要先判断它们是否为null。import java.util.*;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = va原创 2020-08-31 17:49:54 · 144 阅读 · 0 评论 -
LeetCode 286. Walls and Gates
首先将所有gate推入队列。 然后,为每个gate更新其相邻单元,并将其推入队列。 重复上述步骤,直到队列中没有剩余。还需要注意的语法点是,我们定义的GATE和EMPTY变量必须放在函数外面。代码如下:class Solution { private static final int GATE = 0; private static final int EMPTY = Integer.MAX_VALUE; public void wallsAndGates(int[][] r原创 2020-06-29 12:22:01 · 122 阅读 · 0 评论 -
LeetCode 785. Is Graph Bipartite?
维护一个一维数组color[],记录每个点的颜色。创建时的默认值0代表尚未被涂色,1代表红色,-1代表蓝色。最外圈的for循环每一次代表一次BFS。如果这是一个连通图(Connected Graph),那么只循环1次就能完成给所有点上色。如果这是一个非连通图(Disconnected Graph),则循环次数等于connected component的个数。在每个点加入队列时给其上色。在出队时,逐个检查他的邻居,如果尚未被涂色则涂上相反的颜色并加入队列;如果已被涂色且与当前颜色相同,则返回false。htt原创 2020-06-29 10:09:26 · 125 阅读 · 0 评论 -
LeetCode 378. Kth Smallest Element in a Sorted Matrix
这道题可以用heap来做,有两种视角:Best First Search: 这种写法每次需要expand右边和下边两个数,同一个数可能会被expand两次。因此需要一个二维数组visited[][]来记录每个数是否已经被expand过了。 class Solution { public int kthSmallest(int[][] matrix, int k) { int rows = matrix.length; int cols = matrix[0]原创 2020-06-29 09:18:43 · 86 阅读 · 0 评论 -
LeetCode 103. Binary Tree Zigzag Level Order Traversal
维护一个boolean变量odd,当odd == true时,将被expand的node的值插在list的末尾;否则插在list头部。每一层遍历完后,对odd进行取反操作。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tree原创 2020-06-27 14:15:27 · 86 阅读 · 0 评论 -
LeetCode 958. Check Completeness of a Binary Tree
一旦我们遇到气泡以后,就不可以再碰到任何数字。所以设置一个boolean变量flag,当遇到null时就设置成true,以后如果再遇到数字就return false。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNod原创 2020-06-27 13:20:32 · 98 阅读 · 0 评论 -
LeetCode 107. Binary Tree Level Order Traversal II
这道题和102题几乎一样,每层的结点在二维数组中存放的先后顺序不同,只需将最后存放位置每次都从0开始放就可以了。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; }..原创 2020-06-27 07:23:56 · 89 阅读 · 0 评论 -
LeetCode 102. Binary Tree Level Order Traversal
在每一层遍历开始前,先记录队列中的结点数量n(也就是这一层的结点数量),然后一口气处理完这一层的n个结点。注意Queue使用offer,List使用add方法。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNod...原创 2020-06-27 06:55:14 · 78 阅读 · 0 评论
分享