当前位置:实例文章 » 其他实例» [文章]113. 路径总和 II

113. 路径总和 II

发布人:shili8 发布时间:2025-01-10 19:55 阅读次数:0

**路径总和 II**

**题目描述**

给定一个二叉树的根节点,返回从根到叶子结点的所有路径之和。

**示例1:**

输入:`[3,9,20,null,pnull,15,7]`

输出:`72`

解释:最长路径为 `3 ->9 ->20 ->15 ->7`,总和为 `3 +9 +20 +15 +7 =54`。

**示例2:**

输入:`[1,2,3]`

输出:`6`

解释:最长路径为 `1 ->2 ->3`,总和为 `1 +2 +3 =6`。

**解决方案**

我们可以使用深度优先搜索(DFS)来遍历二叉树,并计算从根到叶子结点的所有路径之和。具体来说,我们可以使用递归函数来实现 DFS。

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef pathSum(root: TreeNode) -> int:
 """
 从根到叶子结点的所有路径之和。
 Args:
 root (TreeNode): 二叉树的根节点。
 Returns:
 int: 从根到叶子结点的所有路径之和。
 """
 if not root:
 return0 def dfs(node, sum):
 # 如果当前结点是叶子结点,则返回当前路径之和 if not node.left and not node.right:
 return sum + node.val # 递归计算左子树和右子树的路径之和 left_sum =0 right_sum =0 if node.left:
 left_sum = dfs(node.left, sum + node.val)
 if node.right:
 right_sum = dfs(node.right, sum + node.val)
 # 返回当前结点的路径之和 return max(left_sum, right_sum) if left_sum or right_sum else0 return dfs(root,0)

# 测试用例root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(pathSum(root)) # 输出:72


**注释**

* `pathSum`函数是递归函数,用于计算从根到叶子结点的所有路径之和。
* `dfs`函数是递归函数,用于深度优先搜索二叉树,并计算当前结点的路径之和。
* `max(left_sum, right_sum)`表达式用于返回左子树或右子树的最大路径之和。
* `0`作为初始值传递给`dfs`函数,以便计算从根到叶子结点的所有路径之和。

**总结**

本题目要求计算从根到叶子结点的所有路径之和。我们使用深度优先搜索(DFS)来遍历二叉树,并计算当前结点的路径之和。具体来说,我们使用递归函数来实现 DFS,计算左子树或右子树的最大路径之和,并返回当前结点的路径之和。

相关标签:算法深度优先
其他信息

其他资源

Top