当前位置:网站首页>[牛客网刷题 Day5] JZ77 按之字形顺序打印二叉树
[牛客网刷题 Day5] JZ77 按之字形顺序打印二叉树
2022-07-07 08:14:00 【strawberry47】
题目:
给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)
思路:
拿到题目的第一想法就是–使用队列呀,奇偶的时候存的东西不一样;行不通。。。
后来又想到使用双边队列,分情况从哪边进哪边出,发现找不到什么规律。。。
看了答案,发现用到了两个栈;也有使用队列,只不过每隔一层就反向打印一下
根据reverse的思路,我花了二十分钟写出来了代码:
class Solution:
def Print(self, pRoot: TreeNode):
# write code here
if pRoot is None:
return None
res = []
q = queue.Queue()
q.put(pRoot)
flag = 0
while not q.empty():
cur_res = []
n = q.qsize()
for i in range(n):
node = q.get()
cur_res.append(node.val)
if node.left:
q.put(node.left)
if node.right:
q.put(node.right)
if flag % 2 != 0:
cur_res.reverse()
res.append(cur_res)
flag = flag+1
return res
答案:
双栈(没咋看明白):
import copy
class Solution:
def Print(self , pRoot: TreeNode) -> List[List[int]]:
head = pRoot
res = []
if not head:
# 如果是空,则直接返回空list
return res
s1, s2 = [], []
# 放入第一次
s1.append(head)
while s1 or s2:
temp = []
# 遍历奇数层
while s1:
node = s1[-1]
# 记录奇数层
temp.append(node.val)
# 奇数层的子节点加入偶数层
if node.left:
s2.append(node.left)
if node.right:
s2.append(node.right)
s1.pop()
# 数组不为空才添加
if len(temp):
res.append(copy.deepcopy(temp))
# 清空本层数据
temp.clear()
# 遍历偶数层
while s2:
node = s2[-1]
# 记录偶数层
temp.append(node.val)
# 偶数层的子节点加入奇数层
if node.right:
s1.append(node.right)
if node.left:
s1.append(node.left)
s2.pop()
if len(temp):
res.append(temp)
return res
边栏推荐
- High number_ Chapter 1 space analytic geometry and vector algebra_ Quantity product of vectors
- 1323:【例6.5】活动选择
- 基于HPC场景的集群任务调度系统LSF/SGE/Slurm/PBS
- Kotlin实现微信界面切换(Fragment练习)
- Study summary of postgraduate entrance examination in July
- The Hal library is configured with a general timer Tim to trigger ADC sampling, and then DMA is moved to the memory space.
- Postman interface test I
- LeetCode 练习——113. 路径总和 II
- 求方程ax^2+bx+c=0的根(C语言)
- VS Code指定扩展安装位置
猜你喜欢

P1223 排队接水/1319:【例6.1】排队接水

0x0fa23729 (vcruntime140d.dll) (in classes and objects - encapsulation.Exe) exception thrown (resolved)

Pdf document signature Guide

对存储过程进行加密和解密(SQL 2008/SQL 2012)

基于gis三维可视化技术的智慧城市建设

IO模型复习

VS Code指定扩展安装位置

Weekly recommended short videos: what are the functions of L2 that we often use in daily life?

ISP、IAP、ICP、JTAG、SWD的编程特点

SolidWorks工程图中添加中心线和中心符号线的办法
随机推荐
Finally, there is no need to change a line of code! Shardingsphere native driver comes out
php \n 换行无法输出
STM32中AHB总线_APB2总线_APB1总线这些是什么
A wave of open source notebooks is coming
STM32 product introduction
@Transcation的配置,使用,原理注意事项:
MCU is the most popular science (ten thousand words summary, worth collecting)
Some test points about coupon test
Postman interface test VI
Apprentissage avancé des fonctions en es6
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
Inno Setup 打包及签名指南
Parameter sniffing (2/2)
ORM -- query type, association query
LeetCode 练习——113. 路径总和 II
JMeter loop controller and CSV data file settings are used together
Guid primary key
ES6中的函數進階學習
How to cancel automatic saving of changes in sqlyog database
柏拉图和他的三个弟子的故事:如何寻找幸福?如何寻找理想伴侣?