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
复制代码

 

posted @   靖意风  Views(5)  Comments(0Edit  收藏  举报
点击右上角即可分享
微信分享提示