【LeetCode】Binary Tree Zigzag Level Order Traversal
2015-11-08 04:26
295 查看
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree
return its zigzag level order traversal as:
正负得负,负负得正,
所以每次都是逆序traverse当前的level,要注意的是rightNode和leftNode进入的先后顺序
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
List<TreeNode> current = new ArrayList<>();
if(root == null)
return result;
current.add(root);
List<TreeNode> next = new ArrayList<>();
boolean reverseOrder = true;
while(!current.isEmpty()){
List<Integer> levelResult = new LinkedList<>();
for(int i = current.size() - 1; i >= 0; i--){
TreeNode currentNode = current.get(i);
levelResult.add(0, currentNode.val);
if(reverseOrder){
if(currentNode.right != null) next.add(currentNode.right);
if(currentNode.left != null) next.add(currentNode.left);
}
else{
if(currentNode.left != null) next.add(currentNode.left);
if(currentNode.right != null) next.add(currentNode.right);
}
}
current.clear();
reverseOrder = !reverseOrder;
result.add(levelResult);
List<TreeNode> tmp = current;
current = next;
next = tmp;
}
return result;
}
}
For example:
Given binary tree
{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
正负得负,负负得正,
所以每次都是逆序traverse当前的level,要注意的是rightNode和leftNode进入的先后顺序
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
List<TreeNode> current = new ArrayList<>();
if(root == null)
return result;
current.add(root);
List<TreeNode> next = new ArrayList<>();
boolean reverseOrder = true;
while(!current.isEmpty()){
List<Integer> levelResult = new LinkedList<>();
for(int i = current.size() - 1; i >= 0; i--){
TreeNode currentNode = current.get(i);
levelResult.add(0, currentNode.val);
if(reverseOrder){
if(currentNode.right != null) next.add(currentNode.right);
if(currentNode.left != null) next.add(currentNode.left);
}
else{
if(currentNode.left != null) next.add(currentNode.left);
if(currentNode.right != null) next.add(currentNode.right);
}
}
current.clear();
reverseOrder = !reverseOrder;
result.add(levelResult);
List<TreeNode> tmp = current;
current = next;
next = tmp;
}
return result;
}
}
相关文章推荐
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
- Mysql学习篇之---Windows环境下安装
- C++: 拷贝管理
- Integer自动装箱分析
- 匿名内部类构造函数分析
- PHP时间戳、时间戳转北京时间日期
- [并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例]
- [并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例]
- 静态内部类和非静态内部类的区别
- 编译时、运行时、构建时(一)
- 编译时、运行时、构建时(二)
- Smallest Rectangle Enclosing Black Pixels 解答
- c++ 11 数组 和lambda表达式 语法 / 函数包装器 基本用法
- 深入理解Java中的final关键字
- 35 个 Java 代码性能优化总结
- 从JAVA多线程理解到集群分布式和网络设计的浅析
- Azure Reserved IP
- #soj 3076 相同字符串(tire树)
- Azure Remote Desktop: "An error occurred while loading from file *.rdp"
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现