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 List<List<Integer>> levelOrder(TreeNode root) {
		List<List<Integer>> result = new ArrayList<List<Integer>>();
		if(root == null) return result;
		
		Queue<TreeNode> q = new LinkedList<TreeNode>();
		q.offer(root);
		while(!q.isEmpty()){
			List<Integer> thisLevel = new ArrayList<Integer>();
			int qSize = q.size();
			for(int i = 0; i < qSize; i++){
				TreeNode curr = q.poll();
				thisLevel.add(curr.val);
				if(curr.left != null) q.offer(curr.left);
				if(curr.right != null) q.offer(curr.right);
			}
			result.add(thisLevel);
		}
		return result;
	}
}

@@ -195,16 +195,21 @@
 ;%0D%0A%0D%0A/**
+%0D%0A * 
 102. Bin
@@ -570,16 +570,18 @@
 _102 %7B%0D%0A
+%0D%0A
 %09public 
@@ -674,29 +674,16 @@
 rayList%3C
-List%3CInteger%3E
 %3E();%0D%0A%09%09
@@ -684,16 +684,17 @@
 );%0D%0A%09%09if
+ 
 (root ==
@@ -720,12 +720,8 @@
 t;%0D%0A
-%09%09%0D%0A
 %09%09Qu
@@ -752,26 +752,16 @@
 nkedList
-%3CTreeNode%3E
 ();%0D%0A%09%09q
@@ -782,16 +782,17 @@
 %0A%09%09while
+ 
 (!q.isEm
@@ -797,16 +797,17 @@
 Empty())
+ 
 %7B%0D%0A%09%09%09Li
@@ -843,25 +843,16 @@
 rrayList
-%3CInteger%3E
 ();%0D%0A%09%09%09
@@ -880,16 +880,17 @@
 %0D%0A%09%09%09for
+ 
 (int i =
@@ -908,16 +908,17 @@
 ze; i++)
+ 
 %7B%0D%0A%09%09%09%09T
@@ -975,24 +975,25 @@
 al);%0D%0A%09%09%09%09if
+ 
 (curr.left !
@@ -1027,16 +1027,17 @@
 %0D%0A%09%09%09%09if
+ 
 (curr.ri
@@ -1131,11 +1131,13 @@
 t;%0D%0A%09%7D%0D%0A
+%0D%0A
 %7D%0D%0A

refactor 102