1. 题目
2. 解析
2.1 二叉树的广度优先搜索
使用队列,优先进入队列的优先出来,一层一层的走
def bfs(root: Node):
queue = [root]
res = []
while queue:
n = queue.pop(0)
n.left and queue.append(n.left)
n.right and queue.append(n.right)
res.append(n.val)
return res
2.2 二叉树的深度优先算法
使用栈,先入后出,将每一个深度层级走完,再走下一个深度层级
def dfs(root: Node):
stack = [root]
res = []
while stack:
n = stack.pop()
# 先加入右边的,保证可以先将左侧的层级先走
n.right and stack.append(n.right)
n.left and stack.append(n.left)
res.append(n.val)
return res
3. 考点
对层级的不同进行排序,需要考虑列表嵌套,需要对每一个层级的数据进行遍历 然后加入结果集
4. 核心代码
from typing import List
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
res, queue = [], [root]
while queue:
tmp = []
# 遍历该层的所有元素,加入子集
for _ in range(len(queue)):
node = queue.pop(0)
node.left and queue.append(node.left)
node.right and queue.append(node.right)
tmp.append(node.val)
# 判断层级是否应该倒序
res.append(tmp if len(res) % 2 == 0 else tmp[::-1])
return res
if __name__ == '__main__':
r = TreeNode(3)
r9 = TreeNode(9)
r20 = TreeNode(20)
r15 = TreeNode(15)
r7 = TreeNode(7)
r.left = r9
r.right = r20
r20.left = r15
r20.right = r7
s = Solution()
print(s.levelOrder(r))