题目
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201029104423574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0OTIyMDg1,size_16,color_FFFFFF,t_70#pic_center)
思路
- 首先想到要遍历二叉树,这里用到前序递归遍历。
- 递归时用字符串拼接的方法进行“累加”。
- 每次递归判断是否到叶子节点,如果是,则将累加的字符串转为整型,加到totalsum里去。否则继续遍历。
- 最后遍历结束返回totalsum。
代码如下(在ide下调试的代码,可以直接运行)
package demo;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Solution {
static int totalsum = 0;
public static void main(String[] args){
TreeNode treeNode = new TreeNode(1);
TreeNode treeNode1 = new TreeNode(2);
TreeNode treeNode2 = new TreeNode(3);
treeNode.left = treeNode1;
treeNode.right = treeNode2;
treeNode1.left = null;
treeNode1.right = null;
treeNode2.left = null;
treeNode2.right = null;
System.out.println(sumNumbers(treeNode));
}
public static int sumNumbers(TreeNode root) {
f(root, "");
return totalsum;
}
public static void f(TreeNode root, String sum){
if (root != null){
if (root.left == null && root.right == null){
sum += String.valueOf(root.val);
totalsum += Integer.valueOf(sum);
}else{
sum += String.valueOf(root.val);
}
f(root.left, sum);
f(root.right, sum);
}
}
}