question:
层序遍历和前中后序遍历的不同在与,后面三者用栈实现,二层序遍历则用队列实现比较块
这里引出深度优先搜索DFS和广度优先搜索BFS
解题:
广度优先搜索BFS
class Solution:
# 广度优先搜索BFS
def levelOrder(self, root: TreeNode) -> List[List[int]]:
queue=[root] # 将根节点保存到queue中
ans=[]
if not root:
return []
while queue:
temp = []
for _ in range(len(queue)):
node = queue.pop(0) #将第一个节点弹出保存到temp中
temp.append(node.val)
if node.left:
#如果根节点有左右子节点,则将左右子节点添加上来,此时层数变为2
queue.append(node.left)
if node.right:
queue.append(node.right)
ans.append(temp)
return ans
深度优先搜索
from collections import defaultdict
class Solution:
def levelOrder(self, root):
ret = defaultdict(list)
def dfs(base, level):
nonlocal ret
if base:
ret[level].append(base.val)
dfs(base.left, level + 1)
dfs(base.right, level + 1)
dfs(root, 0)
return list(ret.values())