当前位置:网站首页>[牛客网刷题 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
边栏推荐
- JMeter about setting thread group and time
- Google colab loads Google drive (Google drive is used in Google colab)
- Advanced function learning in ES6
- Learning records - high precision addition and multiplication
- 高数_第1章空间解析几何与向量代数_向量的数量积
- Adb 实用命令(网络包、日志、调优相关)
- LLVM之父Chris Lattner:為什麼我們要重建AI基礎設施軟件
- The method of word automatically generating directory
- Study summary of postgraduate entrance examination in August
- SQLyog数据库怎么取消自动保存更改
猜你喜欢
The physical meaning of imaginary number J
STM32中AHB总线_APB2总线_APB1总线这些是什么
Weekly recommended short videos: what are the functions of L2 that we often use in daily life?
IO模型复习
求方程ax^2+bx+c=0的根(C语言)
【HigherHRNet】 HigherHRNet 详解之 HigherHRNet的热图回归代码
浅谈日志中的返回格式封装格式处理,异常处理
[sword finger offer] 42 Stack push in and pop-up sequence
Postman interface test III
Remote meter reading, switching on and off operation command
随机推荐
【剑指Offer】42. 栈的压入、弹出序列
Study summary of postgraduate entrance examination in July
LLVM之父Chris Lattner:為什麼我們要重建AI基礎設施軟件
@Configuration, use, principle and precautions of transmission:
ORM model -- creation and query of data records
一文讲解单片机、ARM、MUC、DSP、FPGA、嵌入式错综复杂的关系
Some test points about coupon test
ORM model -- associated fields, abstract model classes
ORM -- grouping query, aggregation query, query set queryset object properties
Advanced function learning in ES6
搭建物联网硬件通信技术几种方案
JMeter installation
Serial communication relay Modbus communication host computer debugging software tool project development case
01 use function to approximate cosine function (15 points)
Guid主键
2022.7.3DAY595
UnityWebRequest基础使用之下载文本、图片、AB包
.NET配置系统
反射效率为什么低?
IO模型复习