怎样实现从上到下打印python二叉树
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这期内容当中小编将会给大家带来有关怎样实现从上到下打印python二叉树,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。题目描述从上到下打印出二叉树的每个节点,同一层
千家信息网最后更新 2025年02月08日怎样实现从上到下打印python二叉树
这期内容当中小编将会给大家带来有关怎样实现从上到下打印python二叉树,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
题目描述
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
节点总数 <= 1000
题目样例
示例
输入
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
输出
[3,9,20,15,7]
题目思考
哪些数据结构可以做到按层输出?
解决方案
思路
经典的 BFS 思路, 将当前节点的左右非空子节点追加到队列结尾, 然后继续往后遍历队列, 最终整个队列就是最后的结果 由于这里是树, 所以每个节点只可能被加入队列访问一次, 无需额外的 visit 集合 另外这道题不需要分开保存每一层的节点, 所以这里不需要记录当前层的长度之类的情况, 可以直接一次循环搞定 数据结构方面, 可以采用列表 + 动态的 for 循环(python 3 适用, 其他语言可能不支持遍历过程中更改容器)或者双端队列 + while 循环(所有语言通用, 每次 pop 最左边的元素作为当前节点) 下面的代码是个人觉得比较通用的 BFS 模板, 包括列表和双端队列两种方式的实现, 适用于不需要单独处理每一层节点的情况, 供大家参考
复杂度
时间复杂度 O(N)
每个节点只需要遍历一次 空间复杂度 O(N)
额外需要一个列表/双端队列
代码
方案 1 - 列表 + for 循环
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
# 方案1: 列表+for循环
if not root:
return []
q = [root]
for node in q:
# 只将非空子节点追加到队列
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return [x.val for x in q]
方案 2 - 双端队列 + while 循环
import collections
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
# 方案2: 双端队列+while循环
if not root:
return []
q = collections.deque([root])
res = []
while q:
node = q.popleft()
res.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
return res
上述就是小编为大家分享的怎样实现从上到下打印python二叉树了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
节点
队列
循环
方案
复杂
复杂度
题目
代码
内容
就是
思路
情况
数据
数据结构
空子
结构
语言
分析
输出
专业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器sit测试招聘
wps数据库怎么搜索特定文章
最火奇迹游戏服务器
linux服务器密钥管理
彩虹6 号连接不上服务器
数据库界面管理工具
网络安全零基础入门PDF
山东软件开发公司加班吗
ict网络安全方向
计算机网络安全防护要求
戴尔机柜服务器
广东r7525服务器报价
db2数据库怎么授权
网络服务器有哪些
银海外贸数据库
东平手机app软件开发公司
收银机安装数据库
VNC链接服务器时报错超时
展讯软件开发
儿童一年级网络安全手抄报
ph软件开发
java服务器远程控制电脑
淄博定制软件开发推荐
对象关系数据库有没有缺点
数据库连接数一直很高
数据库毕业设计选课管理系统
七牛文件保存到数据库
徐州软件开发 专注
网络安全专业哪个大学最好
win10 共享服务器