leetcode 102.二叉树的层次遍历

108 阅读1分钟

102.二叉树的层次遍历

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

    3
   / \
  9  20
    /  \
   15   7
[
  [3],
  [9,20],
  [15,7]
]          层次遍历结果
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:  # BFS
        q = root and collections.deque([(root, 0)])  
        r = []  # 初始化队列,压入根节点(节点,层次)
        while q:  # 使用 wile 进入队列循环,直到搜索完毕
            node, layer = q.popleft()  # 从队头取出一个节点
            if len(r) < layer + 1:
                r.append([])  # 分配当前层的子数组
            r[layer].append(node.val)  # 记录当前层节点值
            if node.left:  # 放入周围的节点
                q.append((node.left, layer + 1))
            if node.right:
                q.append((node.right, layer + 1))
        return r
# 使用 BFS 遍历二叉树,队列同时记录节点与层次