采用BFS广度优先搜索,关键是利用队列维护正在访问层的所有节点。
目录
一、题目
二、解答
利用python的 deque 构建队列。
思路:首先将根节点加入队列,利用 size(deque) 维护当前访问层的节点数,将本层的节点加入列表,然后pop已经访问过的节点,将其左右子树节点加入队列,循环往复直至deque队列中无访问节点。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
from collections import deque
class Solution(object):
def printFromTopToBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
result = []
queue = deque([root]) #根节点入队列
while queue:
level = []
size = len(queue) # 当前层的节点数
for _ in range(size):
node = queue.popleft() #pop
level.append(node.val) #加入列表
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level)
return result