LeetCode 501. Find Mode in Binary Search Tree in F#
URL
Find Mode in Binary Search Tree - LeetCode
Code
https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/0501/main.fsx
open System
type Tree =
| Leaf
| Node of int * Tree * Tree
let findMode (root: Tree) : int list =
let rec nodeFreq node acc =
match node with
| Leaf -> acc
| Node(v, left, right) ->
let acc' =
match Map.tryFind v acc with
| Some(n) -> Map.add v (n + 1) acc
| None -> Map.add v 1 acc
let acc'' = nodeFreq left acc'
nodeFreq right acc''
let freq = nodeFreq root Map.empty
let mode = Map.fold (fun acc _ (v: int) -> Math.Max(acc, v)) -1 freq
freq |> Map.fold (fun acc k v -> if v = mode then k :: acc else acc) []