📅  最后修改于: 2023-12-03 15:06:20.002000             🧑  作者: Mango
给出一棵二叉树,找到其中两个叶子节点之间的最小和路径。路径的和表示路径上所有节点的值之和。
输入: [1,2,3,4,5]
1
/ \
2 3
/ \
4 5
输出: 8
说明: 最小和路径为 4 + 1 + 3 = 8。
可以使用递归的方式,对于每个节点,计算它左右子树中路径长度之和最小的叶子节点的所有路径的长度,取其中的最小值,并加上经过该节点的路径长度(如果该节点是叶子节点,则直接返回0,否则返回它左右子树中路径长度之和最小的叶子节点的所有路径的长度)。
class Solution:
def min_leaf_path_sum(self, root: TreeNode) -> int:
def dfs(node: TreeNode) -> Tuple[int,int]:
if not node:
return float('inf'), 0
if not node.left and not node.right:
return 0, node.val
left_min_len, left_leaf_sum = dfs(node.left)
right_min_len, right_leaf_sum = dfs(node.right)
if left_min_len < right_min_len:
min_len = left_min_len
min_leaf_sum = left_leaf_sum
elif left_min_len > right_min_len:
min_len = right_min_len
min_leaf_sum = right_leaf_sum
else:
min_len, min_leaf_sum = left_min_len, min(left_leaf_sum, right_leaf_sum)
return min_len + 1, min_leaf_sum + node.val
return dfs(root)[1]