[leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树Z字形层序遍历
2024-10-20 15:49:53
相对于102题,稍微改变下方法就行
迭代方法:
在102题的基础上,加上一个变量来判断是不是需要反转
反转的话,当前list在for循环结束后用collection的反转方法就可以实现反转
递归方法:
由于有层数,所以用层数%2判断是不是需要反转
反转的话就元素都添加到最前边,一层添加完后就是反的
下边是递归方法
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
/*
递归方法是判断当前层是否需要反转
反转层添加方法:元素总是添加到第一个,这样就相当于反转了
非反转层正常添加
*/
helper(root,0);
return res;
}
public void helper(TreeNode root,int c)
{
if (root==null)
return;
if (res.size()==c)
res.add(new ArrayList<>());
List<Integer> cur = res.get(c);
if (c%2==0) cur.add(root.val);
else cur.add(0,root.val);
if (root.left!=null)
helper(root.left,c+1);
if (root.right!=null)
helper(root.right,c+1);
}
这个题一开始没做出来是因为:
觉得反转的情况应该反向添加(递归)节点,但是发现不行,因为如果反向添加(递归)节点,那么下个节点就会全部自动反向
应该是反向添加数值,节点的遍历顺序不能动
最新文章
- [原创]Mac系统下制作OS 10.11安装镜像
- Unity3d使用UGUI实现长按功能
- size_t 类型
- 解决php中json_decode的异常JSON_ERROR_CTRL_CHAR
- 移动端JS 触摸事件基础
- 简单工厂模式(Simple Factory Pattern)
- C#6.0 VS2015
- Axure RP 各个版本中文版 汉化包 破解版 下载地址及注册码
- OC学习总结之面向对象和类
- MCS51浮点计算程序
- 【转】如何调整visio绘图区域尺寸大小
- A2D规则引擎
- wps使用积累
- freemarker报错之十五
- python函数调用之自我调用与C++比较
- 【JVM虚拟机】(6)---深入理解Class中访问标志、类索引、父类索引、接口索引
- scrapy爬虫框架学习笔记(一)
- (HDU 1542) Atlantis 矩形面积并——扫描线
- html接收参数
- day 0313函数的初识
热门文章
- PTA天梯赛校内模拟
- python 安装第三方库
- Spring Boot 2 集成 Swagger
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的 baseSize和sizeIncrement
- Pentaho Report Designer 入门教程(一)
- Web前端-按钮点击效果(水波纹)
- 百度前端技术学院-基础-day20-21
- 题解 CF1428G Lucky Numbers (Easy Version and Hard Version)
- 超详细!使用 LVS 实现负载均衡原理及安装配置详解---转
- Android全面解析之由浅及深Handler消息机制