python3 队列的使用
在leetcode 如下题目中使用队列
637. 二叉树的层平均值:
103. 二叉树的锯齿形层序遍历 (如下代码记录 103 题目)
class Solution:
def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root: return []
que = deque([root])
ans = []
odd = True
while que:
vals = []
for _ in range(len(que)):
node = que.popleft()
vals.append(node.val)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
ans.append(vals if odd else vals[::-1])
odd = not odd
return ans
994. 腐烂的橘子 使用deque 进行BFS
class Solution: def orangesRotting(self, grid: List[List[int]]) -> int: row, col = len(grid), len(grid[0]) cnt_fresh, cnt_time = 0, 0 que = deque() for ix in range(row): for jy in range(col): if 1 == grid[ix][jy]: cnt_fresh += 1 elif 2 == grid[ix][jy]: que.append((ix, jy)) if 0 == cnt_fresh: return 0 while (len(que)): #while(que) 也是可以的 cnt_time += 1 for _ in range(len(que)): ix,jy = que.popleft() for i, j in (ix-1, jy),(ix+1, jy),(ix, jy-1),(ix, jy+1): if 0 <= i <row and 0 <= j < col and 1 == grid[i][j]: grid[i][j] = 2 cnt_fresh -= 1 que.append((i, j)) #finish to check fresh orange # check if there are fresh if cnt_fresh == 0: break #check result return -1 if cnt_fresh else cnt_time
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步