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

python-leetcode 40.二叉树的层序遍历

题目:

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


 方法:广度优先搜索

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    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: #当前节点有左子树(node.left),将左子节点添加到 nxt 列表
                    nxt.append(node.left)
                if node.right:  #当前节点有右子树(node.right),将右子节点添加到 nxt 列表
                    nxt.append(node.right)
            cur=nxt #将下一层的节点赋给 cur,准备进入下一轮循环
            ans.append(vals) #将当前层的节点值vals添加到 ans 列表中,表示这一层的值已经完成处理
        return ans
        

时间复杂度:O(n)

空间复杂度:O(n)

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: Optional[TreeNode]
        :rtype: List[List[int]]
        """
        ret=[] #用于存储最终的层序遍历结果
        if root is None:
            return ret
        queue=[]
        queue.append(root)
        while queue: #只要队列中有节点,继续进行层序遍历
            level=[] #用于存储当前层所有节点的值
            currentLevelSize=len(queue)
            for i in range(currentLevelSize): #获取当前队列中节点的数量,也就是当前层的节点数量
                node=queue.pop(0) #每次循环从队列中弹出一个节点
                level.append(node.val) #将节点的值 node.val 添加到 level 列表中
                if node.left is not None: #如果节点有左子树,将左子节点 node.left 加入队列
                    queue.append(node.left)
                if node.right is not None: #如果节点有右子树,将右子节点 node.right 加入队列
                    queue.append(node.right)
            ret.append(level) #当前层的所有节点值存入 level 列表中
        return ret
        

时间复杂度:O(n)

空间复杂度:O(n)

相关文章:

  • 【Windows API】SetFilePointerEx函数用法介绍
  • 数仓搭建(hive):DM搭建(数据集市层)
  • MVCC(多版本并发控制)
  • LLM论文笔记 15: Transformers Can Achieve Length Generalization But Not Robustly
  • linux学习【7】Sourc Insight 4.0设置+操作
  • 有限元分析的两种数值求解方法:显式分析和隐式分析
  • 一文2000字从0到1用Jmeter全流程性能测试实战
  • 【Spring属性注入】构造器注入 vs 字段注入
  • 企业知识管理的网络构建与优化路径探析
  • 【前端框架】Vue3 面试题深度解析
  • 利用ollama本地部署deepseek
  • Linux操作系统4-进程间通信3(基于管道的进程池设计)
  • Cython学习笔记1:利用Cython加速Python运行速度
  • 2025年信息科学与工程学院科协单片机编程介绍——按键拓展编程
  • 第6章:基于LangChain如何开发Agents,附带客户支持智能体示例
  • Spring Boot 中多线程工具类的配置与使用:基于 YAML 配置文件
  • 21.回溯算法3
  • 【2025最新版】Chrome谷歌浏览器如何能恢复到之前的旧版本
  • 【信息系统项目管理师-案例真题】2013下半年案例分析答案和详解
  • 对CSS了解哪些?
  • 巴基斯坦召开国家安全委员会紧急会议,应对印方连环举措
  • 特朗普支持率降至新低:宣布关税后骤降,选民最不满经济表现
  • 牛市早报|特朗普称或将“大幅降低”对华关税,外交部回应
  • 首开股份:去年亏损约81.4亿元,是公司发展史上极其困难的一年
  • 新任乒协副主席马龙:感谢刘国梁,愿把经验传给年轻运动员
  • 2024年我国数字阅读用户规模达6.7亿