解题思路
此问题可以通过深度优先搜索(DFS)来解决。基本思想是从根节点开始遍历每个节点,并将当前节点的值添加到当前路径上。当到达叶子节点时,将当前路径上的所有数字组合成一个整数,并累加到最终结果中。
AC代码示例
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def sumNumbers(self, root: TreeNode) -> int:
def dfs(node, current_number):
if not node.left and not node.right:
return int(current_number)
else:
result = 0
if node.left:
result += dfs(node.left, current_number + str(node.left.val))
if node.right:
result += dfs(node.right, current_number + str(node.right.val))
return result
if not root:
return 0
return dfs(root, str(root.val))
总结与改进
在LeetCode环境中,如果在一个函数内部定义另一个函数并需要访问外部变量,通常需要使用`global`关键字。然而,更好的做法是利用类的属性来避免使用`global`,这可以使代码更加简洁和易于理解。
使用类属性简化代码
class Solution:
def __init__(self):
self.total_sum = 0
def sumNumbers(self, root: TreeNode) -> int:
def dfs(node, current_number):
if not node.left and not node.right:
self.total_sum += int(current_number)
return
if node.left:
dfs(node.left, current_number + str(node.left.val))
if node.right:
dfs(node.right, current_number + str(node.right.val))
if not root:
return 0
dfs(root, str(root.val))
return self.total_sum