当前位置: 面试刷题>> 求根节点到叶节点数字之和(经典算法150题)


### 题目描述 给定一个二叉树,树的每个节点都包含一个数字(`0-9`),这棵树的每条从根到叶的路径都代表一个数字。例如,路径`1 -> 2 -> 3`表示数字`123`。 计算从根到叶的所有路径所表示的数字之和。 **示例**: ``` 1 / \ 2 3 ``` 这棵树的根到叶的路径分别为`1->2`和`1->3`,它们分别表示数字`12`和`13`,因此数字之和为`12 + 13 = 25`。 ### PHP 示例代码 ```php class TreeNode { public $val; public $left; public $right; function __construct($val = 0, $left = null, $right = null) { $this->val = $val; $this->left = $left; $this->right = $right; } } function sumNumbers($root) { return dfs($root, 0); } function dfs($node, $currentSum) { if ($node === null) { return 0; } // 更新当前路径的数字和 $currentSum = $currentSum * 10 + $node->val; // 到达叶子节点,返回当前路径的和 if ($node->left === null && $node->right === null) { return $currentSum; } // 递归左右子树,并累加结果 return dfs($node->left, $currentSum) + dfs($node->right, $currentSum); } // 示例用法 $root = new TreeNode(1); $root->left = new TreeNode(2); $root->right = new TreeNode(3); echo sumNumbers($root); // 输出 25 ``` ### Python 示例代码 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def sumNumbers(root): def dfs(node, current_sum): if not node: return 0 current_sum = current_sum * 10 + node.val if not node.left and not node.right: return current_sum return dfs(node.left, current_sum) + dfs(node.right, current_sum) return dfs(root, 0) # 示例用法 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) print(sumNumbers(root)) # 输出 25 ``` ### JavaScript 示例代码 ```javascript function TreeNode(val, left, right) { this.val = (val===undefined ? 0 : val) this.left = (left===undefined ? null : left) this.right = (right===undefined ? null : right) } function sumNumbers(root) { function dfs(node, currentSum) { if (!node) return 0; currentSum = currentSum * 10 + node.val; if (!node.left && !node.right) { return currentSum; } return dfs(node.left, currentSum) + dfs(node.right, currentSum); } return dfs(root, 0); } // 示例用法 const root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); console.log(sumNumbers(root)); // 输出 25 ``` 这些示例展示了如何使用深度优先搜索(DFS)来解决这个问题,通过递归遍历树的每个路径,并在到达叶子节点时累加路径表示的数字。
推荐面试题