题目地址:
https://www.lintcode.com/problem/sum-root-to-leaf-numbers/description
给定一棵二叉树,从树根到叶子可以组成一个数的十进制表示。求所有表示出来的数的总和。
思路是DFS。我们可以将从树根到当前节点组成的数字作为参数向下传递,到了叶子节点的时候就是base case,就返回。代码如下:
public class Solution {
/**
* @param root: the root of the tree
* @return: the total sum of all root-to-leaf numbers
*/
public int sumNumbers(TreeNode root) {
// write your code here
return dfs(root, 0);
}
// prev指从树根到root的父亲节点构成的数字
private int dfs(TreeNode root, int prev) {
if (root == null) {
return 0;
}
// sum计算的是从树根到当前root组成的数字
int sum = prev * 10 + root.val;
// 如果root是叶子节点,则将这个数字返回
if (root.left == null && root.right == null) {
return sum;
}
// 否则继续向下传递参数,汇总左右子树的结果后返回
return dfs(root.left, sum) + dfs(root.right, sum);
}
}
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。