Binary Tree Level Order Traversal

Solution: we can utilize two queues to control we traverse level by level.

public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> result = new ArrayList();
    if (root == null) return result;
    Queue<TreeNode> current = new LinkedList<TreeNode>();
    Queue<TreeNode> next = new LinkedList<TreeNode>();

    current.offer(root);
    List<Integer> currentLevel = new ArrayList();

    while (!current.isEmpty()) {
        TreeNode node = current.poll();
        currentLevel.add(node.val);
        if (node.left != null) {
            next.offer(node.left);
        }
        if (node.right != null) {
            next.offer(node.right);
        }

        if (current.isEmpty()) {
            result.add(new ArrayList(currentLevel));
            currentLevel = new ArrayList();
            current = next;
            next = new LinkedList<TreeNode>(); 
        }
    }

    return result;
}