Python程序:查找二叉树路径形成的所有数字之和
假设我们有一个二叉树,其中每个节点包含一个从 0 到 9 的单个数字。现在,从根到叶子的每条路径都表示一个数字,其数字按顺序排列。我们必须找到树中所有路径表示的数字之和。
因此,如果输入类似于
则输出将为 680,因为 46 (4 → 6)、432 (4 → 3 → 2)、435 (4 → 3 → 5),它们的和为 913。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数 solve()。它将接收根节点和一个字符串(初始为空字符串)。
- 如果根节点存在且没有左子节点和右子节点,则
- 返回将字符串与根节点的值连接起来后形成的整数。
- 总和初始化为 0。
- 如果根节点的左子节点不为空,则
- 总和加上 solve(左子节点, 字符串连接根节点的值) 的数值。
- 如果根节点的右子节点不为空,则
- 总和加上 solve(右子节点, 字符串连接根节点的值) 的数值。
- 返回总和。
让我们看看以下实现以获得更好的理解:
示例
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root, string=""): if root and not root.left and not root.right: return int(string + str(root.val)) total = 0 if root.left: total += int(self.solve(root.left, string + str(root.val))) if root.right: total += int(self.solve(root.right, string + str(root.val))) return total ob = Solution() root = TreeNode(4) root.left = TreeNode(6) root.right = TreeNode(3) root.right.left = TreeNode(2) root.right.right = TreeNode(5) print(ob.solve(root))
输入
root = TreeNode(4) root.left = TreeNode(6) root.right = TreeNode(3) root.right.left = TreeNode(2) root.right.right = TreeNode(5)
输出
913
广告