'''
解题思路:
1、BFS广度优先搜索,先获得每一层需要输出节点的个数,再一个个减小到0,这一层输出结束后,再输出下一层
2、queue.insert(0, cur.left),新增节点插入到0位
'''
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 
# @param root TreeNode类 
# @return int整型二维数组
#
class Solution:
    def levelOrder(self , root ):
        # write code here        
        if not root:
            return None

        queue = [root]
        res = []
        def bfs(root):
            while queue:
                n = len(queue)
                level = []
                while n>0:
                    cur = queue.pop()
                    level.append(cur.val)
                    if cur.left:
                        queue.insert(0, cur.left)
                    if cur.right:
                        queue.insert(0, cur.right)
                    n -= 1
                res.append(level)
            return res

        return bfs(root)