当前位置: 首页 > news >正文

102.二叉树的层序遍历- 力扣(LeetCode)

题目:

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

示例 1:

输入:root = [3,9,20,null,null,15,7]

输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]

输出:[[1]]

示例 3:

输入:root = []

输出:[]

提示:

  • 树中节点数目在范围 [0, 2000] 内

  • -1000 <= Node.val <= 1000

思路如下:

        广度优先搜索(BFS),可以使用两个数组或使用一个队列来辅助完成。

题解如下:
#两个数组
class Solution:
    def levelOrder(self, root):
        """
                  :type:  root: Optional[TreeNode]
                  :rtype: List[List[int]]
        """
        if root is None:
            return []
        ans = []
        cur = [root]
        while cur:
            nxt = []       # 存储下一层的节点
            vals = []      # 存储当前层的节点值
            for node in cur:
                vals.append(node.val)   # 收集当前层节点的值
                if node.left: nxt.append(node.left)   # 左子节点加入下一层
                if node.right:nxt.append(node.right)  # 右子节点加入下一层
            cur = nxt        # 更新当前层为下一层
            ans.append(vals) # 将当前层结果加入最终列表
        return ans
#一个队列
class Solution:
    def levelOrder(self, root):
        """
                  :type:  root: Optional[TreeNode]
                  :rtype: List[List[int]]
        """
        if root is None:
            return []
        ans = []
        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)  # 右子节点加入队列
        	ans.append(vals)
        return ans
示例流程:
      1     
     / \   
    2   3  
   / \ 
  4   5

#两个数组

第1层:cur = [1] → vals = [1] → nxt = [2, 3] → ans = [[1]]

第2层:cur = [2, 3] → vals = [2, 3] → nxt = [4, 5] → ans = [[1], [2, 3]]

第3层:cur = [4, 5] → vals = [4, 5] → nxt = [] → ans = [[1], [2, 3], [4, 5]]

最终结果:[[1], [2, 3], [4, 5]]。

#一个队列

第1层:q = [1] → 处理 1 → vals = [1] → q = [2, 3] → ans = [[1]]

第2层:q = [2, 3] → 处理 2, 3 → vals = [2, 3] → q = [4, 5] → ans = [[1], [2, 3]]

第3层:q = [4, 5] → 处理 4, 5 → vals = [4, 5] → q = [] → ans = [[1], [2, 3], [4, 5]]

最终结果:[[1], [2, 3], [4, 5]]。

相关文章:

  • JavaScript Number 对象
  • Unity中使用FMETP STREAM传输实时画面
  • python全栈-vue框架
  • Hibernate:让对象与数据库无缝对话的全自动ORM框架
  • CesiumEarth能够本地浏览的三维倾斜模型切片(3DTiles)
  • GESP2025年3月认证C++七级( 第三部分编程题(2)等价消除)
  • 图像形态学操作对比(Opencv)
  • VSCode中选择Anaconda的Python环境
  • java数组06:Arrays类
  • 数据结构--线性表
  • 让你方便快捷实现主题色切换(useCssVar)
  • 【征程 6】工具链 VP 示例中 Cmakelists 解读
  • 创建虚拟环境无法加载到pycharm当conda环境,只能为python环境
  • C语言-字符串操作函数手册:语法、技巧与经典应用
  • FreeRTOS使任务处于挂起态的API
  • 小白学习java第11天(下):多线程详解
  • MergeX亮相GTC2025:开启全球广告流量交易新篇章
  • ​asm汇编源代码之-汉字点阵字库显示程序源代码下载​
  • JAVA——初识JAVA
  • Java学习手册:Java异常处理机制
  • 站内优化包括哪些/今天的新闻 联播最新消息
  • 建设微网站的特色/百度app安装下载
  • 吉安市建设局图审中心网站/有效获客的六大渠道
  • 开发公司网签物料/seo网页的基础知识
  • 免费wordpress资源/seo查询 站长之家
  • 网站建设必会的软件有哪些/网站单向外链推广工具