2265. Count Nodes Equal to Average of Subtree
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 \((\textit{ls}, \textit{ln})\) and \((\textit{rs}, \textit{rn})\), respectively. Then, the sum \(\textit{s}\) and the number of nodes \(\textit{n}\) of the subtree rooted at the current node are \(\textit{ls} + \textit{rs} + \textit{root.val}\) and \(\textit{ln} + \textit{rn} + 1\), respectively. If \(\textit{s} / \textit{n} = \textit{root.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 \(\textit{s}\) and \(\textit{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)\). Here, \(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 | |

