LeetCode OJ - Binary Tree Zigzag level Order Traversal

这个题目我觉得是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             //1\3\5... 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     }

 

posted @ 2014-05-04 21:42  echoht  阅读(148)  评论(0编辑  收藏  举报