LeetCode 2265. Count Nodes Equal to Average of Subtree in F#

URL

Count Nodes Equal to Average of Subtree - LeetCode

Code

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/challenge/202311/count_nodes_equal_to_average_of_subtree/main.fsx

type Tree =
    | Leaf
    | Node of int * Tree * Tree

let averageOfSubtree (root: Tree) : int =
    let rec averageOfSubtree' node =
        match node with
        | Leaf -> 0, 0, 0
        | Node(v, left, right) ->
            let ret1, sum1, count1 = averageOfSubtree' left
            let ret2, sum2, count2 = averageOfSubtree' right

            let count = 1 + count1 + count2
            let sum = v + sum1 + sum2
            let average = sum / count

            let ret = if v = average then ret1 + ret2 + 1 else ret1 + ret2
            ret, sum, count

    let ret, _, _ = averageOfSubtree' root
    ret