37
1
type Tree<'a> =
2
| Empty
3
| Node of 'a * Tree<'a> * Tree<'a>
4
5
let traverse (tree : Tree<'a>) =
6
let rec loop (trees : seq<Tree<'a>>) = seq {
7
let values =
8
trees
9
|> Seq.choose (function
10
| Empty -> None
11
| Node (value, _, _) -> Some value)
12
13
yield! values
14
15
let subtrees =
16
trees
17
|> Seq.collect (function
18
| Empty -> Seq.empty
19
| Node (value, left, right) -> seq { yield left; yield right })
20
|> Seq.toArray
21
22
if subtrees.Length > 0 then
23
yield! loop subtrees
24
}
25
26
loop <| seq { yield tree }
27
28
let tree =
29
Node (1,
30
Node (2,
31
Node (4, Empty, Empty),
32
Node (5, Empty, Empty)),
33
Node (3,
34
Node (6, Empty, Empty),
35
Empty))
36
37
traverse tree |> Seq.iter (printfn "%d")
Programa que suma n numeros primos
ingresa n:
>
ingresa n: