相对于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);
}

这个题一开始没做出来是因为:

觉得反转的情况应该反向添加(递归)节点,但是发现不行,因为如果反向添加(递归)节点,那么下个节点就会全部自动反向

应该是反向添加数值,节点的遍历顺序不能动

最新文章

  1. [原创]Mac系统下制作OS 10.11安装镜像
  2. Unity3d使用UGUI实现长按功能
  3. size_t 类型
  4. 解决php中json_decode的异常JSON_ERROR_CTRL_CHAR
  5. 移动端JS 触摸事件基础
  6. 简单工厂模式(Simple Factory Pattern)
  7. C#6.0 VS2015
  8. Axure RP 各个版本中文版 汉化包 破解版 下载地址及注册码
  9. OC学习总结之面向对象和类
  10. MCS51浮点计算程序
  11. 【转】如何调整visio绘图区域尺寸大小
  12. A2D规则引擎
  13. wps使用积累
  14. freemarker报错之十五
  15. python函数调用之自我调用与C++比较
  16. 【JVM虚拟机】(6)---深入理解Class中访问标志、类索引、父类索引、接口索引
  17. scrapy爬虫框架学习笔记(一)
  18. (HDU 1542) Atlantis 矩形面积并——扫描线
  19. html接收参数
  20. day 0313函数的初识

热门文章

  1. PTA天梯赛校内模拟
  2. python 安装第三方库
  3. Spring Boot 2 集成 Swagger
  4. PyQt(Python+Qt)学习随笔:Qt Designer中部件的 baseSize和sizeIncrement
  5. Pentaho Report Designer 入门教程(一)
  6. Web前端-按钮点击效果(水波纹)
  7. 百度前端技术学院-基础-day20-21
  8. 题解 CF1428G Lucky Numbers (Easy Version and Hard Version)
  9. 超详细!使用 LVS 实现负载均衡原理及安装配置详解---转
  10. Android全面解析之由浅及深Handler消息机制