2015-03-07 3 views
-1

Как вы пишете рекурсивную функцию для построения двоичного дерева, где листы (значение, индекс) с индексом имеют уникальное последовательное целое число?Как создать двоичное дерево с уникальными индексами в F #

Текущий код что-то вроде:

let rec MakeTree size = 
    if size = 0 then 0 else 
     match ran.Next (3) with 
     | 0 -> Cow (MakeTree (size-1),MakeTree (size-1)) 
     | 1 -> Dog (MakeTree (size-1),MakeTree (size-1)) 
     | 2 -> Cat (MakeTree (size-1),MakeTree (size-1)) 
+0

Я думаю, вы должны предоставить свой код. – demas

ответ

0

Вот версия без значений, но они легко добавить:

Определим дерево как:

type Tree<'T when 'T: comparison> = 
| Empty 
| Node of 'T * Tree<'T> * Tree<'T> 

И сделать вставка функция, подобная

let rec insert index = function 
| Empty -> Node(index, Empty, Empty) 
| Node(i, left, right) when index < i -> Node(i, insert index left, right) 
| Node(i, left, right) when index > i -> Node(i, left, insert index right) 
| Node(i, left, right) when index = i -> Node(index, left, right) 
| Node(_, _, _) as n -> n 
+0

Спасибо, но я не ищу функцию вставки - скорее способ создать дерево с последовательными целыми числами на листах. –

+0

Итак, вы хотите создать дерево, подобное http://i.imgur.com/pmbhpPp.png, из списка, такого как [(6,5); (6,2); (7,4); (3,3) (4,3), (3,2), (3,5), (5,3)]? – rasmusm

+0

Нет - дерево будет построено рекурсивно с генератором случайных чисел. –