LeetCode 968. Binary Tree Cameras in F#
URL
leetcode.com/problems/binary-tree-cameras
Code
github.com/syohex/dotnet-study/blob/master/..
open System
type Tree =
| Leaf
| Node of int * Tree * Tree
let minCameraCover (root: Tree) : int =
let rec minCameraCover' node =
match node with
| Leaf -> (0, 0, 2000)
| Node (_, left, right) ->
let left0, left1, left2 = minCameraCover' left
let right0, right1, right2 = minCameraCover' right
let leftMin = Math.Min(left1, left2)
let rightMin = Math.Min(right1, right2)
let ret0 = left1 + right1
let ret1 =
Math.Min(left2 + rightMin, right2 + leftMin)
let ret2 =
1
+ Math.Min(left0, leftMin)
+ Math.Min(right0, rightMin)
ret0, ret1, ret2
let _, ret1, ret2 = minCameraCover' root
Math.Min(ret1, ret2)