Функция breadthfirst в Ocaml, которая вычисляет маршрут по уровням бинарного дерева

Мне нужна функция для просмотра уровней бинарного дерева. Дерево будет с таким типом:

type 'a bin_tree = Empty | Node of 'a * 'a bin_tree * 'a bin_tree;;

Все, что у меня есть, это функция, чтобы пройти через нормальное дерево:

let rec breadth_first = function
    Gt (x, []) -> [x] 
   | Gt (x, (Gt (y, t2))::t1) -> x :: breadth_first (Gt (y, t1@t2));;
0
задан 03.12.2019, 17:29
1 ответ
let breath_first tree =
   let rec recorrido acum = function
      [] -> List.rev acum
      |Empty::t -> recorrido acum t
      |Node (x, Empty, Empty)::t -> recorrido (x::acum) t
      |Node (x, r, Empty)::t
      |Node (x, Empty, r)::t -> recorrido (x::acum) (List.append t [r])
      |Node (x, r, e)::t -> recorrido (x::acum) (List.append t [r; e])
   in recorrido [] [tree];;

0
ответ дан 03.12.2019, 18:20