# Solving Leetcode Interviews in Seconds with AI: Count Nodes Equal to Average of Subtree


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "2265" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> 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  

	# Explanation
	Here's an efficient solution to the problem of counting nodes equal to the average of their subtree:

*   **Post-order Traversal:** Traverse the tree in post-order (left, right, root). This ensures that the subtree information is available before processing a node.
*   **Subtree Sum and Count:** For each node, calculate the sum of values and the number of nodes in its subtree.
*   **Average Check:** Compare the node's value with the average of its subtree (sum / count). Increment the count if they are equal.

*   **Time Complexity:** O(N), where N is the number of nodes in the tree. We visit each node once.
*   **Space Complexity:** O(H), where H is the height of the tree, due to the recursive call stack. In the worst case (skewed tree), H = N. In the best case (balanced tree), H = log N.

	
	# Code
	```python
	class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def averageOfSubtree(self, root: TreeNode) -> int:
        self.count = 0

        def subtree_sum_count(node):
            if not node:
                return 0, 0

            left_sum, left_count = subtree_sum_count(node.left)
            right_sum, right_count = subtree_sum_count(node.right)

            subtree_sum = node.val + left_sum + right_sum
            subtree_count = 1 + left_count + right_count

            if node.val == subtree_sum // subtree_count:
                self.count += 1

            return subtree_sum, subtree_count

        subtree_sum_count(root)
        return self.count
	```
			
