【LeetCode HOT100】102. 二叉树的层序遍历

加载中... 浏览

题目

给你二叉树的根节点 root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。

二叉树层序遍历示例图

提示

一句话思路:用队列实现 BFS——每次循环处理当前层的所有节点,把下一层的节点入队

  • deque 队列,先把根节点入队。
  • 外层 while 控制每一层,内层 forlen(q) 精确遍历当前层的节点数,避免混淆不同层。
  • 每层结束把该层节点值列表 vals 加入结果 res
  • 时间 O(n)、空间 O(n)(队列最多存一层节点,满二叉树底层约 n/2)。

答案

python
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        res = []                        # 存储每一层的节点值列表
        if not root:                    # 空树直接返回空列表
            return res
        q = deque([root])               # 队列,初始放入根节点
        while q:                        # 队列不空就继续处理
            vals = []                   # 记录当前层的节点值
            for _ in range(len(q)):     # 按当前层的节点数精确遍历,不混淆层
                node = q.popleft()      # 从队头取出一个节点
                vals.append(node.val)   # 收集该节点的值
                if node.left:           # 左孩子存在,入队(下一层)
                    q.append(node.left)
                if node.right:          # 右孩子存在,入队(下一层)
                    q.append(node.right)
            res.append(vals)            # 当前层处理完毕,加入结果
        return res

留言板

加载评论中...
【LeetCode HOT100】101. 对称二叉树
【LeetCode HOT100】226. 翻转二叉树
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1