不同于前序遍历、中序遍历等,本题需要按照层级从上往下打印,同层级从左往右,可以看出使用BFS算法求解。由于需要使用一个列表存储顺序,递归暂时没有想到可以解决的办法,因此想到使用队列的数据结构,通过它先进先出的特性,将该树存入队列中,每一次遍历时将其非空左右子树推入到队列中,并将本身在循环末尾推出队列,当该队列为空时,则遍历完成。以下是Python代码:

class Solution:
    # 返回从上到下每个节点值列表,例:[1,2,3]
    def PrintFromTopToBottom(self, root):
        # write code here
        res = []
        if not root:
            return res
        queue = [root]
        while queue:
            res.append(queue[0].val)
            if queue[0].left:
                queue.append(queue[0].left)
            if queue[0].right:
                queue.append(queue[0].right)
            queue.pop(0)
        return res