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 then
elements divided byn
and rounded down to the nearest integer. - A subtree of
root
is a tree consisting ofroot
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
Solution: Recursion
Time complexity: O(n)
Space complexity: O(h)
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Author: Huahua class Solution { public: int averageOfSubtree(TreeNode* root) { // Returns {sum(val), sum(node), ans} function<tuple<int, int, int>(TreeNode*)> getSum = [&](TreeNode* root) -> tuple<int, int, int> { if (!root) return {0, 0, 0}; auto [lv, lc, la] = getSum(root->left); auto [rv, rc, ra] = getSum(root->right); int sum = lv + rv + root->val; int count = lc + rc + 1; int ans = la + ra + (root->val == sum / count); return {sum, count, ans}; }; return get<2>(getSum(root)); } }; |