type Tree<'a> =
| Empty
| Node of 'a * Tree<'a> * Tree<'a>
let traverse (tree : Tree<'a>) =
let rec loop (tree : Tree<'a>) = seq {
match tree with
| Empty -> ()
| Node (value, left, right) ->
yield value
yield! loop left
yield! loop right
}
loop tree
let tree =
Node (1,
Node (2,
Node (4, Empty, Empty),
Node (5, Empty, Empty)),
Node (3,
Node (6,
Node (7, Empty, Empty),
Empty),
Node (8, Empty, Empty)))
// 1
// / \
// 2 3
// / \ / \
// 4 5 6 8
// /
// 7
traverse tree |> Seq.iter (printfn "%d") // 1 2 4 5 3 6 7 8