题目:
Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path1->2->3which represents the number123.
Find the total sum of all root-to-leaf numbers.
For example,
1 / \ 2 3
The root-to-leaf path1->2represents the number12.
The root-to-leaf path1->3represents the number13.
Return the sum = 12 + 13 =25.
大概意思:
给定一个只包含0-9位数字的二叉树,每个根到叶的路径都可以表示一个数字。
一个例子是根到叶的路径1->2->3,它表示数字123。
求从根节点到叶子节点的值的和。
解题思路:
先序遍历+数字求和(每一层都比上层和*10+当前根节点的值)
如果遍历到叶子节点,就把当前累加的结果sum返回,如果不是就对左右子节点调用递归函数,将两结果相加返回
需要注意的是sum不能是全局变量,需要遍历某一边之后将其置1
如果节点数超过个位数,那么这个方法也是不管用了
代码如下:
public int sumNumbers(TreeNode root) {
if(root == null ) {
return 0;
}
int sum =0;
return DFS(root,sum);
}
public int DFS(TreeNode root,int sum) {
if(root == null) {
return 0;
}
sum = sum*10 + root.val;
if(root.left == null && root.right == null) {
return sum;
}
return DFS(root.left,sum)+DFS(root.right,sum);
}