• LeetCode OJ


    这个题目我觉得是BFS的扩展,我只是对偶数层的节点先放到一个栈中,这样从栈出来后就换了一个顺序。

    下面是AC代码:

     1 /**
     2 *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).
     3 *
     4 **/
     5 public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root){
     6         ArrayList<ArrayList<Integer>> r = new ArrayList<ArrayList<Integer>>();
     7         if(root == null)
     8             return r;
     9         //for BFS
    10         LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
    11         // to record the level information
    12         LinkedList<Integer> level = new LinkedList<Integer>();
    13         // to reverse the order 
    14         LinkedList<Integer> stack = null;
    15         ArrayList<Integer> sub = null;
    16         queue.offer(root);
    17         level.offer(1);
    18         int last = -1;
    19         while(!queue.isEmpty()){
    20             TreeNode cur = queue.poll();
    21             int la = level.poll();
    22             //135... directly put into an array
    23             if(la!=last && la%2 == 1){
    24                 //put the last level into the total result;
    25                 if(stack!=null){
    26                     ArrayList<Integer> rs = new ArrayList<Integer>();
    27                     while(!stack.isEmpty())
    28                         rs.add(stack.pop());
    29                     r.add(rs);
    30                 }
    31                 sub = new ArrayList<Integer>();
    32                 sub.add( cur.val);
    33             }else if(la!=last && la%2 == 0){
    34                 //put the last level into the total result
    35                 if(sub!=null)
    36                     r.add(sub);
    37                 stack = new LinkedList<Integer>();
    38                 stack.push(cur.val);
    39             }else if(la == last && la%2 == 1){
    40                 sub.add(cur.val);
    41             }else if(la == last && la%2 == 0){
    42                 stack.push(cur.val);
    43             }
    44             if(cur.left != null){
    45                 queue.offer(cur.left);
    46                 level.offer(la+1);
    47             }
    48             if(cur.right != null){
    49                 queue.offer(cur.right);
    50                 level.offer(la+1);
    51             }    
    52             last = la;    
    53         }
    54         //put the last level into the total result
    55         if(last%2 == 1)
    56             r.add(sub);
    57         else{
    58             ArrayList<Integer> rs = new ArrayList<Integer>();
    59             while(!stack.isEmpty())
    60                 rs.add(stack.pop());
    61             r.add(rs);
    62         }
    63         return r;
    64     }
    有问题可以和我联系,bettyting2010#163 dot com
  • 相关阅读:
    数据操作-apply函数族
    11.盛水最多的容器
    canvas绘图
    Nodejs事件监听模块
    http性能测试
    源码解读
    nodejs的一些概念
    http知识补充
    querystring处理参数小利器
    url网址解析的好帮手
  • 原文地址:https://www.cnblogs.com/echoht/p/3708007.html
Copyright © 2020-2023  润新知