题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。

首先这个用C++ 的队列实现是比较简单方便的,下面是python实现,定义了多个列表,比起C++要的队列要稍微麻烦点

思路:
(1)首先定义一个需要返回的列表 res
(2)每次遍历到有节点的时候都要插入节点值到res
(3)另外定义 nextlist 列表目的是保存下一层有节点的值
(4)等到下一层没有节点的时候,nextlist自然也就为空,跳出循环,返回res

    def PrintFromTopToBottom(self, root):
        if not root:
            return []
        res = []#最终的返回列表
        # 先将root中的成员拷贝到新定义的 newroot中
        newroot = [root]
        while newroot:
            nextlist = [] # 定义的下一个列表,每一次循环都要清空
            for i in newroot:
                # 存在左右孩子的话就插到nextlist 列表中
                if i.left:
                    nextlist.append(i.left)
                if i.right:
                    nextlist.append(i.right)
                res.append(i.val)
            newroot = nextlist
        return res