LeetCode:二叉树的锯齿形层次遍历【103】

题目描述

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:
给定二叉树 [3,9,20,null,null,15,7],

    3
/ \
9 20
/ \
15 7

返回锯齿形层次遍历如下:

[
[3],
[20,9],
[15,7]
]

题目分析

  层次遍历,应该很容易想到BFS(宽度优先搜索算法),此处是锯齿形,即一层是从左往右,下一层就是从右往左

  解决办法是每一层都按照从左往右遍历,只是如果是偶数层的话,当遍历完该层后执行一层逆序即可

  这里有一个很好用的集合方法,快速逆序集合:

Collections.reverse(line);

Java题解

package tree;

import java.util.*;

public class ZigzagLevelOrder_103 {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
List<Integer> line = new ArrayList<>(); if(root == null)
return ans;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root); line.add(root.val);
ans.add(line);
line = new ArrayList<>(); int size = queue.size();
int flag = 1;
while(!queue.isEmpty())
{
TreeNode tmp = queue.poll();
if(tmp.left!=null)
{
queue.add(tmp.left);
line.add(tmp.left.val);
}
if(tmp.right!=null)
{
queue.add(tmp.right);
line.add(tmp.right.val);
} size--;
if(size==0&&line.size()>0)
{
if(flag==1)
{
Collections.reverse(line);
flag=0;
}else
flag=1;
size=queue.size();
ans.add(line);
line = new ArrayList<>();
}
}
return ans;
}
}

  

最新文章

  1. python property理解
  2. Java 开发技巧
  3. TListView的一些操作
  4. mvc5入门示例博客(有惊喜)
  5. maven在windows环境下加载settings.xml文件
  6. libsqlite3.dylib找不到
  7. CI 配置验证规则
  8. tiled工具使用
  9. 广州Uber优步司机奖励政策(2月1日~2月7日)
  10. Direct3D 顶点缓存
  11. 如何成为CSDN博客专家
  12. selenium之多线程启动grid分布式测试框架封装(四)
  13. Winform程序
  14. 浅谈sql优化
  15. python导入不同目录下模块的方法
  16. python 爬取腾讯微博并生成词云
  17. Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
  18. Django-CRM项目学习(一)-admin组件
  19. MapReduce编程:数字排序
  20. 如何在宿主机上执行容器里的jmap,jtack,jstat 命令获取信息(原创)

热门文章

  1. placehoder修改
  2. eclipse中mat插件使用
  3. Swoole系列(一):简介
  4. vSphere共享存储全配置流程
  5. Easyui Datagrid扩展fixRownumber方法
  6. Hibernate使用注释
  7. 《转》Ubuntu14.04 openstack juno配置之 ceilometer遥測模块安装配置
  8. ios 2017启动页(Launch Screen Images)、图标(App Icon)尺寸大小
  9. 使用json遇到的问题
  10. (翻译) TFS源码控制的未来 (TFSVC vs. Git)