zoukankan      html  css  js  c++  java
  • [leetcode]Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal

    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,没什么好讲的,用一个boolean变量标记是正序还是逆序,逆序就用头插法,正序用尾插法。

    代码如下:

     1 public class Solution {
     2      List<List<Integer>> res = new ArrayList<List<Integer>>();
     3         public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
     4             if(root == null) return res;
     5             Queue<TreeNode> q = new LinkedList<TreeNode>();
     6             Queue<TreeNode> copy = new LinkedList<TreeNode>();
     7             q.offer(root);
     8             res.add(new ArrayList<Integer>(Arrays.asList(root.val)));
     9             boolean tag = false;
    10             while(!q.isEmpty()){
    11                 TreeNode tem = q.poll();
    12                 if(tem.left != null) copy.offer(tem.left);
    13                 if(tem.right != null) copy.offer(tem.right);
    14                 if(q.isEmpty() && !copy.isEmpty()){
    15                     List<Integer> list = new LinkedList<Integer>();
    16                     if(tag){
    17                         while(!copy.isEmpty()){
    18                             q.add(copy.peek());
    19                             list.add(copy.poll().val);
    20                         }
    21                     }else{
    22                         while(!copy.isEmpty()){
    23                             q.add(copy.peek());
    24                             list.add(0, copy.poll().val);
    25                         }
    26                     }
    27                     res.add(list);
    28                     tag = !tag;
    29                 }
    30             }
    31             return res;
    32         }
    33 }

     我用了两个queue来进行层次的区分,网上很多人很巧妙的用了一个null来表示一层的结束。请参考这里

  • 相关阅读:
    jquery02
    jquery01
    oracle04_plsql
    oracle03
    oracle02
    oracle01
    selenium
    爬取京东商品信息并保存到MongoDB
    python pymongo操作之增删改查
    MongoDB 数据库表删除
  • 原文地址:https://www.cnblogs.com/huntfor/p/3900167.html
Copyright © 2011-2022 走看看