Я хочу добавить узлы дерева в список в предзаказе без объединения списков.
type 'a bintree = Nil | BT of 'a bintree * 'a * 'a bintree
let preorder t =
let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> addpre left (v :: list)
in addpre t [];;
let ab = BT (BT(Nil, 2, Nil),
7,
BT(BT(Nil, 5, Nil), 6, BT(Nil, 11, Nil)))
let r = preorder ab;;
Как вы можете видеть, я знаю, как добавить узлы из ветви (левой или правой), но я не знаю, как добавить узлы из обеих ветвей. Вы можете мне помочь?
UPDATE
Думаю, мне удалось это сделать
let preorder t = let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> v :: addpre left (addpre right list)
in addpre t [];;
Это правильно?