二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和,也就是每个叶结点的深度与权值之积的总和。
给定一棵二叉树 T,请你计算并输出它的 WPL。
注意,根节点的深度为 0。
样例
| 12
 3
 4
 5
 6
 7
 8
 
 | 输入:二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示:8
 / \
 12  2
 / \
 6   4
 
 输出:32
 
 | 
数据范围
二叉树结点数量不超过 1000。
每个结点的权值均为不超过 100 的非负整数。
算法思想
从根结点到各叶结点的路径长度 * 相应叶节点权值 之和。

代码实现1
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 | 
 
 
 
 
 
 
 
 class Solution {
 public:
 int ans;
 
 void dfs(TreeNode * root, int depth){
 if(!root) return;
 
 
 if(!root -> left && !root -> right){
 ans += depth * root -> val;
 }else{
 
 dfs(root -> left, depth + 1);
 dfs(root -> right, depth + 1);
 }
 }
 
 int pathSum(TreeNode* root) {
 dfs(root, 0);
 return ans;
 }
 };
 
 | 
代码实现2
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | 
 
 
 
 
 
 
 
 class Solution {
 public:
 int dfs(TreeNode * root, int depth){
 if(!root) return 0;
 
 
 if(!root -> left && !root -> right) return depth * root -> val;
 
 return dfs(root -> left, depth + 1) + dfs(root -> right, depth + 1);
 }
 
 int pathSum(TreeNode* root) {
 return dfs(root, 0);
 }
 };
 
 |