题目
解法:递归
返回值分别代表·{以当前节点作为根节点的子树所有数字和,符合条件的节点个数,以当前节点作为根节点的子树的节点总数}
class Solution {
public:
vector<int> helper(TreeNode* node){
if(!node) return {0,0,0};
if(!node->left && !node->right) return {node->val,1,1};
int sum_ = 0;
int num = 1;
auto left_res = helper(node->left);
auto right_res = helper(node->right);
sum_ = sum_+ left_res[0] + right_res[0] + node->val;
num = num + left_res[2] + right_res[2];
// if(node->val == 5) cout << sum_ << " " << num << endl;
if(sum_/num == node->val){
return {sum_,1+left_res[1]+right_res[1],num};
}else{
return {sum_,left_res[1]+right_res[1],num};
}
}
int averageOfSubtree(TreeNode* root) {
return helper(root)[1];
}
};
时间复杂度:O(n)
空间复杂度:O(m),m代表树的深度 https://www.ideserve.co.in/learn/time-and-space-complexity-of-recursive-algorithms#:~:text=To%20conclude%2C%20space%20complexity%20of,would%20be%20O(nm).