求根到叶子节点数字之和(DFS简单实现)

it2026-01-21  4

题目

给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。

说明: 叶子节点是指没有子节点的节点。

示例 1: 输入: [1,2,3] 1 / 2 3 输出: 25 解释: 从根到叶子节点路径 1->2 代表数字 12. 从根到叶子节点路径 1->3 代表数字 13. 因此,数字总和 = 12 + 13 = 25.

注意点

注意:该题不需要使用回溯是因为参数sumTemp为基础数据类int,所以sumTemp不会因为其他函数的修改而修改。

实现

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { // 结果 int sum = 0; public int sumNumbers(TreeNode root) { dfs(root, 0); return sum; } public void dfs(TreeNode root, int sumTemp) { if (root == null) { return; } // 更新路径的值 sumTemp = sumTemp * 10 + root.val; // 判断是否为叶子节点 if (null == root.left && null == root.right) { //更新结果 sum += sumTemp; return; } // 递归计算左子树 dfs(root.left, sumTemp); // 递归计算右子树 dfs(root.right, sumTemp); } }
最新回复(0)