题目

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         
         int num = 0;
         boolean reverse = false;//a flag
         
         while(!queue.isEmpty()){
             num = queue.size();
             ArrayList<Integer> levelres = new ArrayList<Integer>();
             
             for(int i = 0; i<num; i++){
                 TreeNode node = queue.poll();
                 levelres.add(node.val);
                 
                 if(node.left!=null)
                     queue.add(node.left);
                 if(node.right!=null)
                     queue.add(node.right);
             }
             
             if(reverse){
                 Collections.reverse(levelres);
                 reverse = false;
             }else{
                 reverse = true;
             }
             res.add(levelres);
         }
         
         return res;
     }

 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;
         int currlevel = 1;
         ArrayList<Integer> tmp = new ArrayList<Integer>();
         while(!queue.isEmpty()){
                 TreeNode t = queue.poll();
                 tmp.add(t.val);
                 currlevel--;
                 
                 if(t.left!=null){
                     queue.add(t.left);
                     nextlevel++;
                 }
                 
                 if(t.right!=null){
                     queue.add(t.right);
                     nextlevel++;
                 }
             
             if(currlevel == 0){
                 currlevel = nextlevel;
                 nextlevel = 0;
                 if(reverse){
                     Collections.reverse(tmp);
                     reverse = false;
                 }else{
                     reverse = true;
                 }
                 res.add(tmp);
                 tmp = new ArrayList<Integer>();
             }
         }
         
         return res;
     }
												

Binary Tree ZigZag Level Order Traversal leetcode java的更多相关文章

  1. Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树

    题目描述: Binary Tree Zigzag Level Order Traversal AC Rate: 399/1474 My Submissions Given a binary tree, ...

  2. Binary Tree Zigzag Level Order Traversal [LeetCode]

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  3. Binary Tree Zigzag Level Order Traversal——LeetCode

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  4. 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告

    Binary Tree Zigzag Level Order Traversal [LeetCode] https://leetcode.com/problems/binary-tree-zigzag ...

  5. LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)

    103. 二叉树的锯齿形层次遍历 103. Binary Tree Zigzag Level Order Traversal 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再 ...

  6. LeetCode解题报告—— Unique Binary Search Trees & Binary Tree Level Order Traversal & Binary Tree Zigzag Level Order Traversal

    1. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that ...

  7. leetCode :103. Binary Tree Zigzag Level Order Traversal (swift) 二叉树Z字形层次遍历

    // 103. Binary Tree Zigzag Level Order Traversal // https://leetcode.com/problems/binary-tree-zigzag ...

  8. 【leetcode】Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...

  9. 【LeetCode】103. Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...

随机推荐

  1. Codeforces.1027F.Session in BSU(思路 并查集)

    题目链接 \(Description\) 有\(n\)个人都要参加考试,每个人可以在\(ai\)或\(bi\)天考试,同一天不能有两个人考试.求最晚考试的人的时间最早能是多少.无解输出-1. \(So ...

  2. 模板 倍增维护RMQ

    倍增维护RMQ,nlogn预处理,O(1)查询 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+7; s ...

  3. 三星打印机SCX-4824HN全套驱动(打印/扫描)

    链接: https://pan.baidu.com/s/1EUXsti4niHlYcMHMJqqnXA 密码: r91a

  4. 【精选】Jupyter Notebooks里的TensorFlow图可视化

    [精选]Jupyter Notebooks里的TensorFlow图可视化   https://mp.weixin.qq.com/s?src=11&timestamp=1503060682&a ...

  5. STM32 F4 Clock Sources

    STM32 F4 Clock Sources Goal: routing clock sources to the microcontroller output pin (MCO1)    High- ...

  6. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...

  7. WebStorm中使用ES6的几种方式

    本篇总结几种在WebStorm下使用ES6的方式. 首先要选择Javascript的版本.依次点击"File","Settings","Languag ...

  8. IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树

    关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起.来看一个简单的泛型委托例子: class Program { static void Main ...

  9. Spring boot配置多个Redis数据源操作实例

    原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...

  10. UIWebView 大全

    <html> <head> </head> <body> <img src = "http://t1.baidu.com/it/u=10 ...