【Leetcode】python - [2265] Count Nodes Equal to Average of Subtree 個人解法筆記 | 292nd LeetCode Weekly Contest

題目出處

2265. Count Nodes Equal to Average of Subtree

難度

medium

個人範例程式碼

# Definition for a binary tree node.
# 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: Optional[TreeNode]) -> int:
        if not root:
            return 0

        self.ans = 0
        self.dfs(root)
        return self.ans

    def dfs(self, node):
        # end of recursion
        if not node:
            return 0, 0

        # define and split
        left_sum, left_cnt = self.dfs(node.left)
        right_sum, right_cnt = self.dfs(node.right)

        if (node.val + left_sum + right_sum) // (1 + left_cnt + right_cnt) == node.val:
            self.ans += 1

        return (node.val + left_sum + right_sum),  (1 + left_cnt + right_cnt)

最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解

算法說明

處理 subtree 的內容,算出所有 subtree 的平均,
我們透過 dfs 往底部搜尋,回傳 sum 與 len

input handling

如果 no root ,return 0

Boundary conditions

dfs 結束條件,if not node,回傳 0, 0

Reference