2016-03-28 2 views
0

Я очень новый в haskell, и у меня есть проблема. Я хочу взять список напр. [0,1,0,0,1,1,0,1] и поместить элементы в структуру дерева;Дерево двоичных выражений

data Tree = Leaf Int | Node String (Tree) (Tree)

до сих пор написал ниже код, но он выдает ошибку.

bdd (x:xs)= if elem x [0..9] then Leaf x else Node x (Tree) (Tree) 

благодарит за Вашу помощь!

+2

Что выполняет ваша функция 'bdd'? И какая ошибка это дает. – Sibi

+0

в этом дереве будут узлы, которые являются строками, а нижние - целыми числами, поэтому я попытался проверить, является ли оно целым или нет, так что снова вызовите дерево, но он говорит, что дерево не в области. – Can

+0

Что должно выглядеть 'Tree' в результате' [0,1,0,0,1,1,0,1] '? – chepner

ответ

2

Вы не используете Tree конструктор на рекурсивный вызов вашей функции, BDD должен возвращать Tree, которым построен с Leaf или Node, но обратите внимание, что узел должен быть построен с 2-деревьев также должны быть построены с Leaf или Node, не Tree

bdd :: [Int] -> Tree 
bdd (x:xs)= if elem x [0..9] then Leaf x else Node (show x) (bdd xs) (bdd xs) 

вы должны проверить, как вы хотите, чтобы правильно построить дерево, это всего лишь пример.

2

Ваш код пытается поставить x в Leaf, требуя, чтобы это было Int, а также пытается потушить в Node, требуя, чтобы это было String. Конечно, Int и String - это разные типы, поэтому это не скомпилируется. Кроме того, Tree является конструктором типа, поэтому вы не можете использовать его в терминах. Каким должен быть ваш код?

+0

он должен взять список и элемент по элементу добавить их из нижнего левого в нижнее право, потому что это дерево будет деревом выражений, как f (x1, x2, x3) – Can

Смежные вопросы