.NET Fiddle

FSharp · Script

/Program.fs

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
;