博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Binary Tree ZigZag Level Order Traversal leetcode java
阅读量:5882 次
发布时间:2019-06-19

本文共 2052 字,大约阅读时间需要 6 分钟。

题目

 

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 {3,9,20,#,#,15,7},

3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

[  [3],  [20,9],  [15,7]] 题解: 这题同样是BFS,用一个flag记录是否需要reverse,如果需要的话就把reverse的结果存储即可。 代码如下:
 1     
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
 2         ArrayList<ArrayList<Integer>> res = 
new ArrayList<ArrayList<Integer>>();
 3         
 4         
if(root==
null)
 5             
return res;
 6         
 7         LinkedList<TreeNode> queue = 
new LinkedList<TreeNode>();
 8         queue.add(root);
 9         
10         
int num = 0;
11         
boolean reverse = 
false;
//
a flag
12 
        
13         
while(!queue.isEmpty()){
14             num = queue.size();
15             ArrayList<Integer> levelres = 
new ArrayList<Integer>();
16             
17             
for(
int i = 0; i<num; i++){
18                 TreeNode node = queue.poll();
19                 levelres.add(node.val);
20                 
21                 
if(node.left!=
null)
22                     queue.add(node.left);
23                 
if(node.right!=
null)
24                     queue.add(node.right);
25             }
26             
27             
if(reverse){
28                 Collections.reverse(levelres);
29                 reverse = 
false;
30             }
else{
31                 reverse = 
true;
32             }
33             res.add(levelres);
34         }
35         
36         
return res;
37     }
 
 1     
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
 2         ArrayList<ArrayList<Integer>> res = 
new ArrayList<ArrayList<Integer>>();
 3         
if(root == 
null)
 4             
return res;
 5         
 6         LinkedList<TreeNode> queue = 
new LinkedList<TreeNode>();
 7         queue.add(root);
 8         Boolean reverse = 
false;
 9         
int nextlevel = 0;
10         
int currlevel = 1;
11         ArrayList<Integer> tmp = 
new ArrayList<Integer>();
12         
while(!queue.isEmpty()){
13                 TreeNode t = queue.poll();
14                 tmp.add(t.val);
15                 currlevel--;
16                 
17                 
if(t.left!=
null){
18                     queue.add(t.left);
19                     nextlevel++;
20                 }
21                 
22                 
if(t.right!=
null){
23                     queue.add(t.right);
24                     nextlevel++;
25                 }
26             
27             
if(currlevel == 0){
28                 currlevel = nextlevel;
29                 nextlevel = 0;
30                 
if(reverse){
31                     Collections.reverse(tmp);
32                     reverse = 
false;
33                 }
else{
34                     reverse = 
true;
35                 }
36                 res.add(tmp);
37                 tmp = 
new ArrayList<Integer>();
38             }
39         }
40         
41         
return res;
42     }
 

转载地址:http://fgsix.baihongyu.com/

你可能感兴趣的文章
解决java8 stream无法复用问题(为要执行的每一个终端操作创建一个新的Stream链)...
查看>>
EIGRP实验——可靠性
查看>>
nginx报错pread() returned only 0 bytes instead of 4091的分析
查看>>
HTML 字符实体
查看>>
质数因子
查看>>
在NVIDIA Quadro NVS 295 显卡上装redhat 黑屏 无信号输入
查看>>
Announcing the new Office 365 admin center
查看>>
小白经营网站的前前后后
查看>>
Spring MVC 教程,快速入门,深入分析——如何实现全局的异常处理
查看>>
单用户模式修改密码
查看>>
微信小程序帮你赚到第一桶金
查看>>
mac下安卓开发环境搭建
查看>>
弹性盒子布局
查看>>
明确自己的位置
查看>>
从Darry Ring看奢侈品该如何玩转互联网思维
查看>>
设计模式第二课 观察者模式
查看>>
DIY强大的虚拟化环境-升级存储主机
查看>>
Spring源码解析(三)——容器创建
查看>>
document.bgcolor设置文档的背景颜色
查看>>
星期天写了点蛋疼的东西(1)
查看>>