Я хочу создать поиск в двоичном формате в двоичных деревьях в OCaml, используя очереди, но я не могу заставить его работать.
похоже, что функция застревает, когда узел не имеетлюбые "соседи".
let rec enque v l =
match l with
[] -> [v]
| h::t -> h::(enque v t)
let rec qhd l =
match l with
h::[] -> h
| h::t -> qhd t
let deque l =
match l with
[] -> []
| h::t -> t
let notempty l = (l != [])
let rec breadthFirstHelp l =
if notempty l
then
let cur = qhd l in
match cur with
Empty -> []
| (Node(Empty, node, Empty)) -> node::(breadthFirstHelp (deque l))
| (Node(left, node, right)) ->
let l = enque right l in
let l = enque left l in
node::(breadthFirstHelp (deque l))
else []
Вот дерево, на котором я тестирую.
[tree =
Node
(Node
(Node (Empty, "A", Empty), "B",
Node (Node (Empty, "C", Empty), "D", Empty)),
"E", Node (Empty, "F", Node (Empty, "G", Node (Empty, "O", Empty))))]
С моим кодом: ["E";«В»;«А»;«А»;«A»]
Ожидаемый результат: [«E»;«В»;"F";«А»;«Д»;"Г";«С»;"O"]