package com.fishercoder.solutions;

import com.fishercoder.common.classes.TreeNode;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * 102. Binary Tree Level Order Traversal

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

For example:
Given binary tree [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]
*/
public class _102 {

  public static class Solution1 {
    public List<List<Integer>> levelOrder(TreeNode root) {
      List<List<Integer>> result = new ArrayList<>();
      if (root == null) {
        return result;
      }
      Queue<TreeNode> queue = new LinkedList();
      queue.offer(root);
      while (!queue.isEmpty()) {
        List<Integer> thisLevel = new ArrayList();
        int size = queue.size();
        for (int i = 0; i < size; i++) {
          TreeNode curr = queue.poll();
          thisLevel.add(curr.val);
          if (curr.left != null) {
            queue.offer(curr.left);
          }
          if (curr.right != null) {
            queue.offer(curr.right);
          }
        }
        result.add(thisLevel);
      }
      return result;
    }
  }
}

@@ -240,18 +240,23 @@
 versal%0D%0A
-%0D%0A
+ *%0D%0A * 
 Given a 
@@ -366,18 +366,23 @@
 evel).%0D%0A
-%0D%0A
+ *%0D%0A * 
 For exam
@@ -387,16 +387,19 @@
 ample:%0D%0A
+ * 
 Given bi
@@ -438,25 +438,27 @@
 %5D,%0D%0A
-%0D%0A
+ *
     3%0D%0A
+ *
    / %5C%0D%0A
   9 
@@ -453,16 +453,18 @@
    / %5C%0D%0A
+ *
   9  20%0D
@@ -464,16 +464,18 @@
  9  20%0D%0A
+ *
     /  %5C
@@ -476,16 +476,18 @@
   /  %5C%0D%0A
+ *
    15   
@@ -489,18 +489,23 @@
 15   7%0D%0A
-%0D%0A
+ *%0D%0A * 
 return i
@@ -538,22 +538,28 @@
 s:%0D%0A
-%0D%0A
+ *%0D%0A * 
 %5B%0D%0A 
+*
  %5B3%5D,%0D%0A 
  %5B9,
@@ -554,16 +554,17 @@
  %5B3%5D,%0D%0A 
+*
  %5B9,20%5D,
@@ -566,16 +566,17 @@
 ,20%5D,%0D%0A 
+*
  %5B15,7%5D%0D
@@ -576,19 +576,23 @@
 %5B15,7%5D%0D%0A
+ * 
 %5D%0D%0A
+ 
 */%0D%0Apubl
@@ -610,16 +610,18 @@
 02 %7B%0D%0A%0D%0A
+  
   public
@@ -647,24 +647,28 @@
 ion1 %7B%0D%0A    
+ 
+   
 public List%3C
@@ -713,24 +713,30 @@
 t) %7B%0D%0A      
+    
+  
 List%3CList%3CIn
@@ -774,24 +774,30 @@
 %3E();%0D%0A      
+     
+ 
 if (root == 
@@ -809,24 +809,32 @@
  %7B%0D%0A        
+       
+ 
 return resul
@@ -833,24 +833,30 @@
 rn result;%0D%0A
+      
       %7D%0D%0A   
@@ -848,24 +848,30 @@
          %7D%0D%0A
+      
       Queue%3C
@@ -903,24 +903,30 @@
 kedList();%0D%0A
+      
       queue.
@@ -945,16 +945,22 @@
 %0D%0A      
+  
+    
 while (!
@@ -975,24 +975,32 @@
 Empty()) %7B%0D%0A
+        
         List
@@ -1047,16 +1047,24 @@
         
+   
+     
 int size
@@ -1077,24 +1077,32 @@
 ue.size();%0D%0A
+        
         for 
@@ -1141,16 +1141,26 @@
         
+ 
+         
 TreeNode
@@ -1192,16 +1192,26 @@
         
+      
+    
 thisLeve
@@ -1230,32 +1230,42 @@
 al);%0D%0A          
+    
+      
 if (curr.left !=
@@ -1278,32 +1278,44 @@
  %7B%0D%0A            
+ 
+           
 queue.offer(curr
@@ -1325,35 +1325,53 @@
 ft);%0D%0A          
-%7D%0D%0A
+          %7D%0D%0A        
           if (cu
@@ -1356,32 +1356,34 @@
                 
+  
 if (curr.right !
@@ -1397,32 +1397,44 @@
  %7B%0D%0A            
+      
+      
 queue.offer(curr
@@ -1445,32 +1445,61 @@
 ht);%0D%0A          
+ 
+         %7D%0D%0A                
 %7D%0D%0A        %7D%0D%0A  
@@ -1485,35 +1485,32 @@
      %7D%0D%0A        
-%7D%0D%0A
         result.a
@@ -1527,27 +1527,39 @@
 el);%0D%0A      
+    
+  
 %7D%0D%0A
+      
       return
@@ -1568,23 +1568,29 @@
 esult;%0D%0A
+    
     %7D%0D%0A
+  
   %7D%0D%0A%7D%0D%0A

refactor 102