当前位置:网站首页>[牛客网刷题 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
边栏推荐
- VS Code指定扩展安装位置
- STM32 ADC and DMA
- STM32 product introduction
- Serial communication relay Modbus communication host computer debugging software tool project development case
- Use of JSON extractor originals in JMeter
- 对存储过程进行加密和解密(SQL 2008/SQL 2012)
- IO模型复习
- 2022.7.3DAY595
- Can I open a stock trading account online? Is it safe
- LeetCode 练习——113. 路径总和 II
猜你喜欢

Appx code signing Guide

Postman interface test III

Postman interface test VI

浅谈日志中的返回格式封装格式处理,异常处理

ORM model -- associated fields, abstract model classes

JMeter loop controller and CSV data file settings are used together

基于HPC场景的集群任务调度系统LSF/SGE/Slurm/PBS

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

求方程ax^2+bx+c=0的根(C语言)

SolidWorks工程图中添加中心线和中心符号线的办法
随机推荐
The landing practice of ByteDance kitex in SEMA e-commerce scene
[email protected] can help us get the log object quickly
Study summary of postgraduate entrance examination in September
2022.7.6DAY598
Guid主键
Guide de signature du Code Appx
IPv4 socket address structure
搭建物联网硬件通信技术几种方案
高数_第1章空间解析几何与向量代数_向量的数量积
LeetCode 练习——113. 路径总和 II
Leetcode exercise - 113 Path sum II
XML configuration file parsing and modeling
[learning notes - Li Hongyi] Gan (generation of confrontation network) full series (I)
fiddler-AutoResponder
求方程ax^2+bx+c=0的根(C语言)
Programming features of ISP, IAP, ICP, JTAG and SWD
Postman interface test VI
Postman interface test IV
LLVM之父Chris Lattner:為什麼我們要重建AI基礎設施軟件
Guid primary key