📅  最后修改于: 2023-12-03 15:36:03.395000             🧑  作者: Mango
二叉树是一种常用的数据结构,在树的基础上增加了左右子树的限制。二叉树可以用于搜索、排序、计算表达式等应用中。本文将介绍如何求解二叉树每一层的最小值。
给定一个二叉树,编写一个函数来获取该树每一层的最小值。例如,给定以下二叉树:
3
/ \
9 20
/ \
15 7
应返回其层序遍历结果中的每一层最小值,即[3, 9, 7]。
一个朴素的思路是对每一层进行遍历后找到最小值,这可以使用二叉树的层序遍历来实现。但是这种方法效率较低,因为每层都需要全遍历一遍。
更好的方法是使用递归算法。我们可以使用一个数组记录每一层的最小值,每次递归到下一层时,将该层节点的值与该层最小值进行比较,如果比最小值还小,则更新最小值。递归结束后,我们就得到了每一层的最小值。
下面是使用递归算法的代码:
def find_min_in_levels(root):
result = []
dfs(root, 0, result)
return result
def dfs(node, level, result):
if node is None:
return
if len(result) <= level:
result.append(node.val)
else:
result[level] = min(result[level], node.val)
dfs(node.left, level + 1, result)
dfs(node.right, level + 1, result)
上述代码实现了二叉树每一层最小值的递归算法,主要思路就是对每一层进行遍历,比较得到最小值后存入数组中。
除了递归算法,我们还可以使用广度优先搜索遍历二叉树。在每个节点被访问时,我们将该节点的值加入到当前层的列表中,并更新该层最小值。遍历完所有节点后,我们就得到了每一层的最小值。
下面是使用广度优先搜索的代码:
from collections import deque
def find_min_in_levels(root):
if root is None:
return []
result = []
queue = deque([root])
while queue:
level_len = len(queue)
level = []
for i in range(level_len):
node = queue.popleft()
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(min(level))
return result
本文介绍了如何求解二叉树每一层的最小值。我们提供了两种不同的方法:递归算法和广度优先搜索。这两种方法都可以解决这个问题,具体选择哪种方法可以根据具体情况评估效率和可读性。