目录
刷刷刷!
题目链接
自己的思路:
深度优先搜索,通过递归,用数组存储当前路径,存储到叶节点后对整个数组进行计算相加。
class Solution {
int sum = 0;
public int sumNumbers(TreeNode root) {
List<TreeNode> arr = new ArrayList<TreeNode>();
arr.add(root);
dfs(root, arr);
return sum;
}
public void dfs(TreeNode root, List<TreeNode> arr){
if(root.left == null && root.right == null){
int len = arr.size();
int i = 1;
while(len > 0){
int num = arr.get(--len).val * i;
sum += num;
i *= 10;//向前进位
}
}
if(root.left != null){
arr.add(root.left);
dfs(root.left, arr);
arr.remove(arr.size() - 1);//回溯
}
if(root.right != null){
arr.add(root.right);
dfs(root.right, arr);
arr.remove(arr.size() - 1);
}
}
}
有什么看不懂的可以评论区里提问。
官方题解
深度优先
发现官方比我写得简洁多了,学习一下。
class Solution {
public int sumNumbers(TreeNode root) {
return dfs(root, 0);
}
public int dfs(TreeNode root, int prevSum) {
if (root == null) {
return 0;
}
int sum = prevSum * 10 + root.val;//一边遍历的时候一边计算
if (root.left == null && root.right == null) {
return sum;
} else {
return dfs(root.left, sum) + dfs(root.right, sum);
}
}
}