2265. Count Nodes Equal to Average of Subtree(C语言)
计算“节点的值 = 该树平均值”的节点个数
题目
Given the root of a binary tree, return the number of nodes where the value of the node is equal to the average of the values in its subtree.
Note:
The average of n elements is the sum of the n elements divided by n and rounded down to the nearest integer.
A subtree of root is a tree consisting of root and all of its descendants.
Example 1:
Input: root = [4,8,5,0,1,null,6]
Output: 5
Explanation:
For the node with value 4: The average of its subtree is (4 + 8 + 5 + 0 + 1 + 6) / 6 = 24 / 6 = 4.
For the node with value 5: The average of its subtree is (5 + 6) / 2 = 11 / 2 = 5.
For the node with value 0: The average of its subtree is 0 / 1 = 0.
For the node with value 1: The average of its subtree is 1 / 1 = 1.
For the node with value 6: The average of its subtree is 6 / 1 = 6.
Example 2:
Input: root = [1]
Output: 1
Explanation: For the node with value 1: The average of its subtree is 1 / 1 = 1.
Constraints:
The number of nodes in the tree is in the range [1, 1000].
0 <= Node.val <= 1000
解答
递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int ret;
void Tra(struct TreeNode* root ,int *num, int *all_value)
{
if(root == NULL)
{
*num = 0;
*all_value = 0;
return ;
}
int num_left, all_value_left, num_right, all_value_right;
Tra(root->left, &num_left, &all_value_left);
Tra(root->right, &num_right, &all_value_right);
*num = num_left + num_right + 1;
*all_value = all_value_left + all_value_right + root->val;
if(*all_value / *num == root->val)
ret ++;
}
int averageOfSubtree(struct TreeNode* root){
ret = 0;
int num, all_value;
Tra(root, &num, &all_value);
return ret;
}
总结
考虑一个节点处的操作,当在这个节点处的操作需要其子树的计算时,可以用传变量地址的方式获取。
void Tra(struct TreeNode* root ,int *num, int *all_value)
{
if(root == NULL)
{
...
}
...(往下传递时做的操作)
Tra(root->left, ...);
Tra(root->right, ...);
...(往上回传时做的操作)
}