#coding:utf-8
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pRoot TreeNode类 
# @return int整型二维数组
#

#*********#
#思路:用两个deque,交替处理
from collections import deque 

class Solution:
    def Print(self , pRoot ):
        # write code here
        #BFS
        #init
        path = []
        #process
        ##corner case
        if pRoot == None:
            return pRoot
        if pRoot.left == None and pRoot.right == None:
            return [[pRoot.val]]
        ##base case
        dq1 = deque()
        dq1.append(pRoot)
        #cur_cnt = 1
        dq2 = deque()
        while len(dq1) > 0 or len(dq2) > 0:
            tmp_level = []
            while len(dq1) > 0:
                cur_node = dq1.popleft()
                tmp_level.append(cur_node.val)
                if cur_node.left != None:
                    dq2.append(cur_node.left)
                if cur_node.right != None:
                    dq2.append(cur_node.right)
            if len(tmp_level) > 0:
                path.append(tmp_level)
            
            tmp_level = []
            while len(dq2) > 0:
                cur_node = dq2.popleft()
                tmp_level.append(cur_node.val)
                if cur_node.left != None:
                    dq1.append(cur_node.left)
                if cur_node.right != None:
                    dq1.append(cur_node.right)
            if len(tmp_level) > 0:
                path.append(tmp_level)
        #print ("Path is: ", path)
        #ret

        return path