当前位置:网站首页>[牛客网刷题 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
边栏推荐
- 求方程ax^2+bx+c=0的根(C语言)
- php \n 换行无法输出
- Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
- XML configuration file parsing and modeling
- STM32 ADC和DMA
- IPv4 socket address structure
- BigDecimal数值比较
- 【acwing】789. Range of numbers (binary basis)
- . Net configuration system
- @Transcation的配置,使用,原理注意事项:
猜你喜欢
Embedded background - chip
High number_ Chapter 1 space analytic geometry and vector algebra_ Quantity product of vectors
Deconvolution popular detailed analysis and nn Convtranspose2d important parameter interpretation
Adb 实用命令(网络包、日志、调优相关)
SolidWorks工程图中添加中心线和中心符号线的办法
0x0fa23729 (vcruntime140d.dll) (in classes and objects - encapsulation.Exe) exception thrown (resolved)
STM32 Basics - memory mapping
Smart city construction based on GIS 3D visualization technology
Google colab loads Google drive (Google drive is used in Google colab)
Postman interface test III
随机推荐
Study summary of postgraduate entrance examination in September
Prototype object in ES6
P1223 排队接水/1319:【例6.1】排队接水
JMeter about setting thread group and time
Deconvolution popular detailed analysis and nn Convtranspose2d important parameter interpretation
Learning records - high precision addition and multiplication
XML configuration file parsing and modeling
Es classes and objects, prototypes
嵌入式背景知识-芯片
Parameter sniffing (2/2)
Kotlin实现微信界面切换(Fragment练习)
C#记录日志方法
HAL库配置通用定时器TIM触发ADC采样,然后DMA搬运到内存空间。
Talking about the return format in the log, encapsulation format handling, exception handling
The Hal library is configured with a general timer Tim to trigger ADC sampling, and then DMA is moved to the memory space.
STM32 ADC and DMA
01 use function to approximate cosine function (15 points)
求方程ax^2+bx+c=0的根(C语言)
浅谈日志中的返回格式封装格式处理,异常处理
VS Code指定扩展安装位置