Given a binary tree containing digits from 0-9
only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3
which represents the number 123
.
Find the total sum of all root-to-leaf numbers.
For example,
1 / \ 2 3
The root-to-leaf path 1->2
represents the number 12
.
The root-to-leaf path 1->3
represents the number 13
.
Return the sum = 12 + 13 = 25
.
将每条path的路径变成一个number, 然后将所有的path构成的number加起来。
依旧是经典的深度优先遍历问题。
可以用递归来求解,递归终止的条件是这个节点是叶子节点(node.left = null && node.right = null )
在这里,我是用一个变量totalSum 来累计所有的path 和。
用一个变量curSum 来累计当前路径的和。
运行时间:
代码:
public class SumRoottoLeafNumbers {
private int totalSum = 0;
private int curSum = 0;
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
doSum(root);
return totalSum;
}
private void doSum(TreeNode root) {
if (root.left == null && root.right == null) {
totalSum += curSum * 10 + root.val;
}
int pre = curSum;
curSum = curSum * 10 + root.val;
if (root.left != null) {
doSum(root.left);
}
if (root.right != null) {
doSum(root.right);
}
curSum = pre;
}
}