这一题是一道很典型的 深度优先遍历题。
解题思路:
利用递归的思想,
我们在外部封装一个方法,参数传入根节点root , 以及上一个节点累计得到的数值。
由于根节点的上一个节点为空,所以另一个参数 起始为 0
将当前节点的上一个节点数值 累计乘上 10 ,再加上当前节点的数值,以此递归调用。
传入结点左右子结点左右递归,再整体相加。
代码部分:
class Solution {
public int sumNumbers(TreeNode root) {
return dfs(root,0);
}
public int dfs(TreeNode root, int n) {
if (root == null) {
return 0;
}
int sum = n * 10 + root.val; // 每一个结点都作为父节点 递归累计
if(root.left == null && root.right == null) {
return sum;
} else {
// 因为我们需要计算根节点到所有末尾节点产生数值的总和,所以返回左子节点得到的总
//和,加上右子节点得到的总和
return dfs(root.left , sum) + dfs(root.right , sum);
}
}
}