LeetCode 235. Lowest Common Ancestor of a Binary Search Tree in F#
URL
leetcode.com/problems/lowest-common-ancesto..
Code
github.com/syohex/dotnet-study/blob/master/..
type Tree =
| Leaf
| Node of int * Tree * Tree
let lowestCommonAncestor (root: Tree) (p: int) (q: int) : int =
let rec collectAncestors' node num acc =
match node with
| Leaf -> None
| Node (v, left, right) ->
let acc' = v :: acc
if v = num then
Some(acc' |> List.rev)
else
match collectAncestors' left num acc' with
| None -> collectAncestors' right num acc'
| ret -> ret
let rec lowestCommonAncestor' ps qs prev =
match ps, qs with
| [], []
| [], _
| _, [] -> prev
| h1 :: t1, h2 :: t2 ->
if h1 = h2 then
lowestCommonAncestor' t1 t2 h1
else
prev
let pAncestors = (collectAncestors' root p []).Value
let qAncestors = (collectAncestors' root q []).Value
lowestCommonAncestor' pAncestors qAncestors System.Int32.MinValue