2265. Count Nodes Equal to Average of Subtree
SourceWeekly Contest 292 Q2DifficultyMediumRating1472
Description
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
nelements is the sum of thenelements divided bynand rounded down to the nearest integer. - A subtree of
rootis a tree consisting ofrootand 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
Solutions
Solution 1: DFS
Thinking
Count nodes whose value equals the floor average of their subtree. \(n \le 10^3\) would allow a fresh scan per node, but that repeats work. One post-order walk can return the subtree sum and size.
\(\textit{dfs}\) returns \((s, n)\); compare \(\lfloor s/n \rfloor\) with the node value and increment. A null tree returns \((0,0)\).
We design a function \(\textit{dfs}\), which calculates the sum and the number of nodes of the subtree rooted at the current node.
The execution process of the function \(\textit{dfs}\) is as follows:
- If the current node is null, return \((0, 0)\).
- Otherwise, we recursively calculate the sum and the number of nodes of the left and right subtrees, denoted as \((ls, \ln)\) and \((rs, rn)\), respectively. Then, the sum \(s\) and the number of nodes \(n\) of the subtree rooted at the current node are \(ls + rs + \textit{root}.\textit{val}\) and \(\ln + rn + 1\), respectively. If \(s / n = \textit{root}.\textit{val}\), it means the current node meets the requirement of the problem, and we increment the answer \(\textit{ans}\) by \(1\).
- Finally, the function \(\textit{dfs}\) returns \(s\) and \(n\).
We initialize the answer \(\textit{ans}\) to \(0\), then call the \(\textit{dfs}\) function, and finally return the answer \(\textit{ans}\).
The time complexity is \(O(n)\), and the space complexity is \(O(n)\), where \(n\) represents the number of nodes in the binary tree.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 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 32 33 34 35 36 37 | |
1 2 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 32 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
1 2 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 32 | |

