day5-广度优先搜索BFS
1. 剑指 Offer 32 - I. 从上到下打印二叉树
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 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:
cur = queue.pop()
if cur:
res.append(cur.val )
queue = [cur.right,cur.left]+queue
return res
2. 剑指 Offer 32 - II. 从上到下打印二叉树 II
1
2
3
4
5
6
7
8
9
10
11
12
13class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
queue = [root]
res = []
while(queue):
cur_res=[]
for i in range(len(queue)): # 这句保证每次清空上一轮队列
cur = queue.pop()
if cur:
cur_res.append(cur.val)
queue = [cur.right,cur.left]+queue
if cur_res:res.append(cur_res)
return res
3. 剑指 Offer 32 - III. 从上到下打印二叉树 III
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
queue=[root]
res = []
l = 1
while(queue):
cur_res=[]
for i in range(len(queue)):
cur = queue.pop()
if cur:
if l%2:cur_res.append(cur.val)
else:cur_res=[cur.val]+cur_res
queue = [cur.right,cur.left]+queue
l+=1
if cur_res:res.append(cur_res)
return res