解题思路:
将二叉树每一层数据从做到右返回,每一层是一个整体,
适合运用广度优先搜索,用队列来实现一层数据的添加,及这一层数据的下一层数据,下下层......
实现:可以先把根节点入队,如果队列不为空,则把队列中每个元素依次出队,每出一个结点,把这个节点加入到一个列表中,再把该结点的左右孩子入队,没有跳过,最后当上一层最后一个元素出队完成后,把这个列表加入到一个大列表中,此时队列中就是下一层按顺序排列的结点,循环直到队列为空结束,
不用队列函数
results = [] #保存每层最终结果
if not root:
return []
que = [root] #初始化队列
while que:
size = len(que)
res = []
for i in range(size): #对队列长度遍历每个节点
cur = que.pop(0) #队列开头元素出队
res.append(cur.val) #保存当前层结点值
if cur.left: #出对节点左右孩子入队
que.append(cur.left)
if cur.right:
que.append(cur.right)
results.append(res)
return results
使用队列函数
results = []
if not root:
return []
from collections import deque
que = deque([root])
while que:
size = len(que)
res = []
for i in range(size):
cur = que.popleft()
res.append(cur.val)
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
results.append(res)
return results
这里使用双边队列deque