首页 > 其他分享 >102. 二叉树的层序遍历(中)

102. 二叉树的层序遍历(中)

时间:2023-11-05 14:56:00浏览次数:33  
标签:cur level res 层序 queue 二叉树 102 root 节点

目录

题目

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

示例 1:

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

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

法一、BFS

  • 双端队列,前后都可以进出
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        queue = collections.deque()#创建一个双端队列
        queue.append(root)#将根节点 root 加入队列中
        res = []          #创建一个空列表 res 用于存储最终的结果
        while queue:      #队列 queue 不为空
            size = len(queue)#当前层级的节点数
            level = []       #存储当前层级的节点值
            for _ in range(size):#循环 size 次
                cur = queue.popleft()#从队列的左侧弹出节点 cur
                if not cur:#如果当前节点 cur 为空,则继续下一次循环
                    continue
                level.append(cur.val)#将当前节点 cur 的值 cur.val 添加到当前层级的列表 level 中
                queue.append(cur.left)#将当前节点 cur 的左子节点 cur.left 加入队列 queue 的右侧。
                queue.append(cur.right)#右子节点 cur.right 加入队列 queue 的右侧。
            if level:#完成内部循环后,如果 level 列表不为空,则将其添加到结果列表 res 中。
                res.append(level)
        return res
  • 普通队列(单端队列),前出后进
import queue
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        q = queue.Queue()
        q.put(root)
        res = []
        while not q.empty():
            size = q.qsize()
            level = []
            for _ in range(size):
                cur = q.get()
                if not cur:
                    continue
                level.append(cur.val)
                q.put(cur.left)
                q.put(cur.right)
            if level:
                res.append(level)
        return res

法二、DFS

  • 前序遍历递归实现
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        res = []#创建一个空列表 res 用于存储最终的结果
        self.level(root, 0, res)#调用辅助函数 level,并将根节点 root、层级初始值 0 和结果列表 res 作为参数传递给它
        return res

    def level(self, root, level, res):#函数 level 递归地处理每个层级的节点
        if not root: return#当前节点 root 为空直接返回,递归的终止条件
        if len(res) == level: res.append([])#如果列表 res 的长度等于当前层级 level,说明当前层级还没有在结果列表中创建对应的子列表,因此使用 res.append([]) 来创建一个空的子列表,用于存储当前层级的节点值。
        res[level].append(root.val)#将当前节点 root 的值添加到结果列表 res 的对应层级的子列表中
        if root.left: self.level(root.left, level + 1, res)#递归地处理当前节点的左子节点
        if root.right: self.level(root.right, level + 1, res)#递归地处理当前节点的右子节点

标签:cur,level,res,层序,queue,二叉树,102,root,节点
From: https://www.cnblogs.com/lushuang55/p/17810519.html

相关文章

  • LeetCode101.对称二叉树
    题目描述给你一个二叉树的根节点root,检查它是否轴对称。示例提条的代码importjava.util.List;importjava.util.ArrayList;importjava.util.Deque;importjava.util.LinkedList;importjava.util.Collections;classSolution{publicbooleanisSymmetric(Tr......
  • 数据结构之树(二叉树的存储方式之链表)
    JavaJava中可以使用链表来实现二叉树的存储。1.链表实现二叉树的原理:   链表是由节点组成的数据结构,每个节点包含一个数据和指向下一个节点的指针。  在链表中,可以将二叉树的每个节点都看作一个链表节点,同时维护一个指向左子节点的指针和一个指向右子节点的指针。通过......
  • 【趣味Javascript】前端开发中不为人知的LHS和RHS查询,你真的弄明白了吗? 《1024程序
    ......
  • 101. 对称二叉树
    目录题目题解、前序遍历+递归题目给你一个二叉树的根节点root,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false题解、前序遍历+递归不仅要判断节点带值的情况,还要考虑空节点位置是否相同clas......
  • 20231102打卡
    今天早上我们学习了UML,下周还有实验课上午,我参加了体育活动,打了一场篮球比赛。作为软工学生,除了学习,我们也要注重身体锻炼。打篮球不仅可以锻炼身体,还可以调节心情,让自己更加活跃和积极。通过这次篮球活动,我和同学们一起团结合作,互相配合,增强了团队意识和集体荣誉感。下午的课程......
  • NU1102 找不到版本为(=5.0.0-dev)的包 Microsoft.NETCore.App.Host.win-x64
    异常: 原因:.NetCore3.0之后的版本,默认情况下项目在生成时,会自动生成与运行时版本相同的可执行文件(exe<Windows下>),它是需要对应版本的一个dotnet-apphost-pack包支持。  解决方法:1.下载安装dotnet-apphost-pack包 2.禁用生成可执行文件,只要.dll文件在项目文件.csp......
  • 20231024
    //ballpark,catalog,exhibit,gamble,inquiry,manufacturer,hammersthout,haveaneyefor,highlyrecommended,keepupright,popupballpark-接受的范围Ballparkreferstoanapproximateorroughestimateorrangethatisconsideredacceptableorreasona......
  • 20231023
    //defection,delivery,deviation,execute,guarantee,technician,callitaday,dealwith,gettheballrolling,ironout,structureddeal,weightheprosandconsdefection-缺点Adefectionreferstoadisadvantageorweaknessinsomethingorsomeone.......
  • 20231025
    //arbitration,authorize,award,breach,certificate,compensate,disposal,evidence,insurance,mistake,negotiable,belowthestandard,inpersonarbitration-仲裁Arbitrationreferstotheprocessofresolvingadisputeorconflictthroughaneutralth......
  • 20231027
    //close,conclude,expansion,formality,improve,initial,lodge,outcome,punctual,sign,signature,successful,version,pavethewayforclose-成交Whenadealoragreementisfinalizedandbothpartiesreachanagreement,itisreferredtoas"c......