问题:
给定一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径
1->2
代表数字 12
从根到叶子节点路径
1->3
代表数字 13
因此,数字总和 = 12 + 13 = 25
示例 2:
输入:root = [4,9,0,5,1]
输出:1026
解释:
从根到叶子节点路径
4->9->5
代表数字 495
从根到叶子节点路径
4->9->1
代表数字 491
从根到叶子节点路径
4->0
代表数字 40
因此,数字总和 = 495 + 491 + 40 =
1026
提示:
树中节点的数目在范围 [1, 1000] 内
0 <= Node.val <= 9
树的深度不超过 10
解答思路:
以下是使用 Java 语言实现计算根节点到叶节点数字之和的示例代码:
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class BinaryTreePathSum {
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int totalSum = 0;
while (!queue.isEmpty()) {
TreeNode currentNode = queue.poll();
if (currentNode.left == null && currentNode.right == null) {
// 叶子节点,将其值累加到总和
totalSum += currentNode.val;
} else {
if (currentNode.left!= null) {
currentNode.left.val = currentNode.val * 10 + currentNode.left.val;
queue.add(currentNode.left);
}
if (currentNode.right!= null) {
currentNode.right.val = currentNode.val * 10 + currentNode.right.val;
queue.add(currentNode.right);
}
}
}
return totalSum;
}
public static void main(String[] args) {
// 构建测试二叉树
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
BinaryTreePathSum example = new BinaryTreePathSum();
int sum = example.sumNumbers(root);
System.out.println("根节点到叶节点数字之和为:" + sum);
}
}
上述代码中,首先定义了一个'TreeNode'类表示二叉树的节点。然后,'sumNumbers'方法用于计算根节点到叶节点的数字之和。它通过层序遍历(BFS)的方式遍历二叉树,对于每个非叶子节点,将其值乘以 10 并加上左子节点或右子节点的值,然后将子节点加入队列中。对于叶子节点,直接将其值累加到总和中。最后,在'main'方法中构建测试二叉树并调用'sumNumbers'方法进行计算并输出结果。
(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)