深度优先搜索
class Solution {
public int sumNumbers(TreeNode root) {
List<String> list = convertStr(root);
int sum = 0;
/**
* Integer.parseInt()将字符串转为整型
*/
for (int i = 0; i < list.size(); i++) {
sum += Integer.parseInt(list.get(i));
}
return sum;
}
public List<String> convertStr(TreeNode root){
List<String> list = new LinkedList<>();
/**
* 空节点返回空列表
*/
if (root == null){
return list;
}
/**
* 如果是叶子节点,将数值转换为字符串加入列表
*/
if (root.left == null && root.right == null){
list.add(Integer.toString(root.val));
return list;
}
List<String> left = convertStr(root.left);
List<String> right = convertStr(root.right);
for (int i = 0; i < left.size(); i++) {
list.add(root.val + left.get(i));
}
for (int i = 0; i < right.size(); i++) {
list.add(root.val + right.get(i));
}
return list;
}
}
/**
* 时间复杂度 O(n^2)
* 空间复杂度 O((logn)^2)
*/
优化1——直接存储数值
class Solution {
public int sumNumbers(TreeNode root) {
return sumNumbers(root, 0);
}
public int sumNumbers(TreeNode root, int sum){
/**
* 空节点返回0
*/
if (root == null){
return 0;
}
sum = root.val + sum * 10;
/**
* 如果是叶子节点,将数值再加上前面的结果乘以10
*/
if (root.left == null && root.right == null){
return sum;
}
return sumNumbers(root.left, sum) + sumNumbers(root.right, sum);
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(logn)
*/
https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/