从上往下打印二叉树

编程笔试(解析及代码实现):从上往下打印二叉树。从上往下打印出二叉树的每个节点,同层节点从左至右打印 编程笔试(解析及代码实现):从上往下打印二叉树。从上往下打印出二叉树的每个节点,同层节点从左至右打印 目录 题目描述 代码实现 题目描述 从上往下打印二叉树。从上往下打印出二叉树的每个节点,同层节点从左至右打印。 代码实现 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # 阅读详情

①

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

算法流程:
特例处理: 当树的根节点为空,则直接返回空列表 [] ;
初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] ;
BFS 循环: 当队列 queue 为空时跳出;
出队: 队首元素出队,记为 node;
打印: 将 node.val 添加至列表 tmp 尾部;
添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue ;
返回值: 返回打印结果列表 res 即可。

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回从上到下每个节点值列表,例:[1,2,3]队列,早进早出
    def PrintFromTopToBottom(self, root):
        # write code here
        l=[]
        if not root:
            return []
        q=[root]
        while len(q):
            t=q.pop(0)
            l.append(t.val)
            
            # l.append(q.pop(0))
            if t.left:
                q.append(t.left)
            if t.right:
                q.append(t.right)
        return l

时间复杂度 O(N) : NN 为二叉树的节点数量,即 BFS 需循环 N 次。
空间复杂度 O(N) : 最差情况下,即当树为平衡二叉树时,最多有 N/2个树节点同时在 queue 中,使用 O(N) 大小的额外空间。

②

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

算法流程:
特例处理: 当根节点为空,则返回空列表 [] ;
初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] ;
BFS 循环: 当队列 queue 为空时跳出;
新建一个临时列表 tmp ,用于存储当前层打印结果;
当前层打印循环: 循环次数为当前层节点数(即队列 queue 长度);
出队: 队首元素出队,记为 node;
打印: 将 node.val 添加至 tmp 尾部;
添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue ;
将当前层结果 tmp 添加入 res 。
返回值: 返回打印结果列表 res 即可

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:

        if not root:
            return []

        res=[]
        q=[root]

        while len(q):
            l=[]
            for _ in range(len(q)):
                t=q.pop(0)
                l.append(t.val)
                if t.left:
                    q.append(t.left)
                if t.right:
                    q.append(t.right)
            res.append(l)
        return res
时间复杂度 O(N) : N为二叉树的节点数量,即 BFS 需循环 N 次。
空间复杂度 O(N) : 最差情况下,即当树为平衡二叉树时,最多有 N/2 个树节点同时在 queue 中,使用 O(N) 大小的额外空间。

。

③32 - III. 从上到下打印二叉树 III

方法一:层序遍历 + 双端队列
利用双端队列的两端皆可添加元素的特性,设打印列表(双端队列) tmp ,并规定:
奇数层 则添加至 tmp 尾部 ,
偶数层 则添加至 tmp 头部 。
算法流程:
特例处理: 当树的根节点为空,则直接返回空列表 [] ;
初始化: 打印结果空列表 res ,包含根节点的双端队列 deque ;
BFS 循环: 当 deque 为空时跳出;
新建列表 tmp ,用于临时存储当前层打印结果;
当前层打印循环: 循环次数为当前层节点数(即 deque 长度);
出队: 队首元素出队,记为 node;
打印: 若为奇数层,将 node.val 添加至 tmp 尾部;否则,添加至 tmp 头部;
添加子节点: 若 node 的左(右)子节点不为空,则加入 deque ;
将当前层结果 tmp 转化为 list 并添加入 res ;
返回值: 返回打印结果列表 res 即可;

# Definition for a binary tree node.
# 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]]:
        if not root:
            return []

        res=[]
        q=[root]
        num=0
        while len(q):
            l=[]
            for _ in range(len(q)):
                t=q.pop(0)
                if len(res)%2!=0:
                    l.insert(0,t.val)
                else:
                    l.append(t.val)

                

                if t.left:
                    q.append(t.left)
                if t.right:
                    q.append(t.right)
                
            num+=1
            res.append(l)
        return res

STM32F401RET6寄存器手册阅读标记 对于时钟树配置,可参考STM32CubeMX中的时钟树配置,STM32CubeMX将基础配置图像化,较为简单。RCC_CR寄存器的HSIRDY位为只读位,当读取值为1时,表示HSI振荡器准备就绪,当HSION位被设置时,HSIRDY会自动设置为低电平。//问题标记:USART配置寄存器信息是如何与USART1/2/3建立联系的(为什么不是三个分别配置)查阅寄存器手册可知,需要配置时钟的模块有:USART1,IO port A。(2)TX配置方法(寄存器手册512页)(4)配置寄存器(寄存器手册548页) 阅读详情

相关推荐

告别编译报错!STC32G12K128在Keil C251下的完整Target配置指南(附ROM设置详解)

本文详细介绍了STC32G12K128在Keil C251下的完整Target配置指南,包括ROM设置、CPU模式选择、内存模型优化等关键步骤。通过实战技巧和常见错误解决方案,帮助开发者高效搭建编译环境,避免常见报错,充分发挥STC32G系列芯片的性能优势。

weixin_29186249的博客 339

【Java】剑指offer(32)从上往下打印二叉树

根据当前层结点数目来打印当前层结点,同时计算下一层结点数目,之后令pCount等于nextCount,重复循环,直到打印完毕。(三)请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。(2)书中提供的方法:采用两个栈,对于不同层的结点,一个栈用于正向存储,一个栈用于逆向存储,打印出来就正好是相反方向。(二)从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。1.功能测试(完全二叉树;

程序员徐师兄的博客 523

SAP PCE私有云MM02修改物料主数据基本单位报错

当前发现只有改为AAAADL(无量纲)单位时会报错,其他的正常。一开始以为配置的ISO码换算有问题,对配置排查后,排除配置问题。最后发现是PCE当前版本的原因,需要打上NOTE。SAP PCE私有云在没有库存和业务单据的情况下,MM02修改物料主数据基本单位报错“EA CPZP MK000000000000:PCS 不可转换为”,详见截图。点击【显示错误】,提示EA CPZP MK000000000000:PCS 不可转换为。从SAP FOR ME下载NOTE 3531359,链接。

dingqing86的专栏 521

【算法】从下到上打印二叉树

二叉树从下到上层次遍历

qq_27198345的博客 513

Dirsearch的下载、安装和使用(全)

Dirsearch工具的下载、安装和使用,超详细超全面

weixin_68416970的博客 1万+

【汽车主动降噪】【ANC算法优化】基于深度学习的汽车主动噪声控制技术研究及Matlab实现

本文探讨了基于深度学习的汽车主动降噪(ANC)算法优化方案。针对传统FXLMS算法在应对复杂、非线性车内噪声时的局限性,文章详细解析了如何利用神经网络作为非线性建模器、深度滤波器或智能步长调节器来增强ANC系统性能,并提供了完整的Matlab仿真实战流程,展示了深度学习在提升降噪效果和收敛速度方面的潜力。

seed的博客 540

算法的学习笔记—从上往下打印二叉树(牛客JZ32)

通过使用广度优先搜索(BFS),我们能够有效地从上到下、从左到右打印出二叉树的所有节点值,并将其存储在一个数组中返回。这种方法不仅直观易懂,而且能够满足题目对时间和空间复杂度的要求,是处理二叉树层序遍历的经典解法。😁热门专栏推荐想学习vue的可以看看这个java基础合集数据库合集redis合集nginx合集linux合集手写机制微服务组件spring_尘觉springMVCmybits🤔欢迎大家加入我的社区尘觉社区文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁。

业精于勤,荒于嬉 1358

STM32L051低功耗模式下LPUART的使用

STM32L0系列低功耗UART配置代码清单及注释,大家可参考学习使用。

嵌入式工程师 2104

从上到下打印二叉树的三种题型

从上到下打印二叉树(一) 也就是我们所熟知的层序遍历 思路分析: 1.首先它需要返回的是一个数组,那么我们首先要做的就是new一个数组,而数组的大小需要我们遍历这棵二叉树计算出来 2. 当我们申请完数组之后,然后借助队列来完成层序遍历 3. 首先将根节点放进去,然后当队列不为空的时候,定义一个cur记录这个节点,然后每弹出一个元素,就放进数组里面 4. 然后再判断这个节点的左节点和右节点是否不为空,当不为空的时候放进队列 //首先获取这棵树有多少个节点 public int getSize(T

wkh18891843165的博客 307

【RT-DETR多模态融合改进】在前期、中期、中后期、后期多模态融合中添加P6大目标检测层,完整步骤及代码

主题: RT-DETR的多模态融合改进中增加P6大目标检测层方式: 分别在前期融合、中期融合、中-后期融合、后期融合中增加P6多模态融合检测层。内容: 包含融合方式详解以及完整配置步骤,开箱即用,一键运行。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样

Limiiiing的博客 395

计算数列位置N的值

本文介绍了一个数列生成问题,要求根据输入的两个整数M和N生成特定规则的数列,并输出第N个位置上的数值。数列生成规则为:前M个元素为1到M;后续元素根据前M个元素是否重复来决定计算方式(求和或求差)。文章提供了C++、Java和Python三种语言的实现方案,均包含输入处理、数列初始化、循环计算和结果输出等步骤。各语言实现中均使用集合去重特性判断重复元素,并通过内置函数或自定义方法求取最大值和最小值。该问题主要考察基础编程能力,包括数组/列表操作、最值计算和重复元素判断等基本编程技巧。

面试高手的博客 658

剑指Offer 022从上往下打印二叉树

022从上往下打印二叉树 题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 方法:用列表模拟栈法 思路:用一个arrayList来模拟queue,用while来判断只要queue存在元素就继续看每个元素的是否有左右节点,有的话就放入queue中 代码: public ArrayList<Integer> PrintFromTopToBottom(TreeNode roo...

从零学起 139

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

剑指offer-从上往下打印二叉树

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路 利用队列先进先出的特点,异常将结点已经左右孩子加入队列,处理完后弹出,知道队列为空停止。 相关 queue 的基本操作有: 入队,如例:q.push(x); 将x 接到队列的末端。 出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。 访问队首元素,如例:q.front(),即最早被压入队列的...

zero 141

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++:从上往下打印出二叉树的每个节点,同层节点从左至右打印。

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 提交代码: class Solution { public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<TreeNode> v_in; vector<int> v_out; if (root==NULL...

luzhongshan的博客 1214

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【剑指offer】从上往下打印二叉树

【剑指offer】从上往下打印二叉树 【本题链接】 【题目描述】 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 【题目解析】 本题主要考察了队列、树等数据结构的使用,题目描述已经很清晰了,就是层序遍历这棵树,我们根据队列先进先出的规则来解决此题。 【解题思路】 1.若树为空,则直接返回数组 2.若不为空,则按照根节点,根的左子树节点和右子树节点进行打印 3.将根节点进入队列,取到对头的元素放入数组,进行出队操作,根的左节点和右节点依次进入队列(左右节点为空则跳出),将已放入数组的对头结点删除。 4

qq_43676757的博客 845

剑指offer 从上往下打印二叉树

题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解题思路: 使用递归的思想,每层节点值放入ArrayList,不断每层遍历,得到结果。 代码(java): import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; Tre...

leo_weile的博客 104

牛客题解 | 从上往下打印二叉树

牛客题库题解

wc529065的博客 1001
上一篇: 链表中倒数第k个节点
下一篇: 二叉搜索树的后序遍历序列
one_zero_one
博客等级 码龄7年 30粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值