LeetCode 1026. Maximum Difference Between Node and Ancestor in F#
URL
leetcode.com/problems/maximum-difference-be..
Code
github.com/syohex/dotnet-study/tree/master/..
open System
type Tree =
| Leaf
| Node of int * Tree * Tree
let maxAncestorDiff (root: Tree) : int =
let rec maxAncestorDiff' node min max =
match node with
| Leaf -> 0
| Node(v, left, right) ->
let min' = Math.Min(min, v)
let max' = Math.Max(max, v)
let diff = Math.Max(Math.Abs(v - min), Math.Abs(v - max))
let leftVal = maxAncestorDiff' left min' max'
let rightVal = maxAncestorDiff' right min' max'
Math.Max(diff, Math.Max(leftVal, rightVal))
match root with
| Leaf -> failwith "never reach here"
| Node(v, _, _) -> maxAncestorDiff' root v v