关注我,分享高质量每日一题题解~
b站同名账号分享力扣杯历届真题视频题解,也欢迎大家提出宝贵意见!
思路:深搜
- 由于我们需要遍历所有的叶结点,也即我们要遍历树中所有结点,所以可以利用深度优先搜索。由于最终的长度包含结点深度,所以深度优先搜索的参数中需要包含当前树结点 $root$ 以及深度 $depth$ 。
- 每次首先判断当前树结点是否为空,若为空则直接返回 $0$;其次判断是否为叶节点,若为叶节点则返回该结点值与深度的乘积;否则继续搜索其左子结点及右子结点。
代码(C++)
class Solution {
public:
int sum(TreeNode* root, int level) {
if(!root) return 0;
if(!root->left && !root->right) {
return root->val * level;
}
return sum(root->left, level + 1) + sum(root->right, level + 1);
}
int pathSum(TreeNode* root) {
return sum(root, 0);
}
};