1. 题目
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
示例:
输入二叉树: [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回:[3,9,20,15,7]
2. BFS 解法
二叉树的从上至下打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)
BFS 通常借助 队列 的先入先出特性来实现
2.1 使用队列的先入先出实现
code:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
if not root:
return []
queue=[root]
ans=[root.val]
while queue:
temp=queue.pop(0)
if temp.left:
queue.append(temp.left)
ans.append(temp.left.val)
if temp.right:
queue.append(temp.right)
ans.append(temp.right.val)
return ans
该方法对 queue 进行先入先出操作,还涉及到了 pop(0) 操作,导致时间复杂度较高
2.2 对队列进行枚举(不需要增删元素)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
queue = [root]
res = []
while queue:
tmp = []
for i in queue:
if i:
tmp.append(i.left)
tmp.append(i.right)
res.append(i.val)
queue = tmp
return res