open Printf type 'a bintree = Nil T of 'a bintree * 'a * 'a bintree let t1 = T (T(Nil, 2, Nil), 7, T(T(Nil, 5, Nil), 6, T(Nil, 11, Nil))) (* tipărește nodurile în preordine *) let rec printpre = function Nil -> () T (left, v, right) -> print_int v; print_newline(); printpre left; printpre right let _ = printpre t1 (* numără noduri în preordine, last: ultimul nod folosit, deci de la last+1 *) let rec countpre last = function Nil -> last T (left, _, right) -> let n1 = last + 1 in (* numărul pentru rădăcină *) let n2 = countpre n1 left in (* număra stânga, ajunge la n2 *) countpre n2 right (* numară dreapta de la n2 *) let _ = countpre 0 t1 |> printf "nr. de noduri: %u\n" (* numără și tipărește fiecare nod cu numărul de ordine *) let preorder = let rec precnt last = function Nil -> last T (left, v, right) -> let n1 = last + 1 in printf "nod %u valoare %d\n" n1 v; let n2 = precnt n1 left in (* parcurge stânga, ajunge la n2 *) precnt n2 right (* numără dreapta pornind de la n2 *) in print_endline "preordine:"; precnt 0 (* 0 a fost folosit -> numără de la 1 *) let _ = preorder t1 (* inordine: arbore stâng, rădăcină, arbore drept *) let inorder = let rec incnt last = function Nil -> last T (left, v, right) -> let n1 = incnt last left in (* parcurge stâng, ajunge la n1 *) let n2 = n1 + 1 in printf "nod %u valoare %d\n" n2 v; incnt n2 right (* apoi dreapta pornind de la n2 *) in print_endline "inordine:"; incnt 0 (* 0 a fost folosit -> numără de la 1 *) let _ = inorder t1 (* postordine: arbore stâng, arbore drept, rădăcină *) let postorder = let rec postcnt last = function Nil -> last T (left, v, right) -> let n1 = postcnt last left in (* parcurge stâng, ajunge la n1 *) let n2 = postcnt n1 right in (* parcurge drept, ajunge la n2 *) let n3 = n2 + 1 in printf "nod %u valoare %d\n" n3 v; n3 (* returnează n3 *) in print_endline "postordine:"; postcnt 0 let _ = postorder t1
This document was generated using caml2html