Problem: 3766. 二叉树的带权路径长度
此题为2014年计算机学科专业基础408真题第41题。
文章目录
方法一:深度优先搜索
思路
由题意可知这是一题树的遍历相关的题目,树的遍历可以使用 d f s dfs dfs。
- 子问题:左子树的WPL+右子树的WPL。
- 递归边界条件:当节点为空时权值为0,当为叶子结点时,返回权值=深度*节点值。
Code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int pathSum(TreeNode* root) {
function<int(TreeNode*, int)> dfs = [&](TreeNode* node, int depth){
if(node == nullptr) return 0;
if(node->left == nullptr && node->right == nullptr)
return node->val * depth;
return dfs(node->left, depth + 1) + dfs(node->right, depth + 1);
};
return dfs(root, 0);
}
};
复杂度
-
时间复杂度:
O ( n ) O(n) O(n),其中 n n n为二叉树的节点个数。 -
空间复杂度:
O ( n ) O(n) O(n),当二叉树为链状时。