#haskell #binary-tree
#haskell #двоичное дерево
Вопрос:
Мне нужно поработать, но я не знаю, как это сделать. У меня есть дерево ячеек
1
/
2 3
/ /
4 5 6 7
И мне нужно найти путь от корня к узлу с помощью координаты [i, j].
Например: (2, 2) -> [1, 3, 6]
fromRoot :: Int -> Int -> Tree a -> [a]
Я написал некоторую функцию для Index и BinTree, но как создать функцию main, я не знаю.
data Tree a = Node (Tree a) a (Tree a)
index :: Tree a -> Int -> Int -> a
index (Node _ x _ ) 0 _ = x
index (Node l x r) i j | ((border i)<j) = index r (i-1) (j-(border i)-1)
| otherwise = index l (i-1) j
border :: Int -> Int
border 0 = 0
border 1 = 0
border l = 2*(border (l-1)) 1
myBuild :: Int -> Tree Int
myBuild n = (Node (myBuild (n*2)) n (myBuild (n*2 1)))
Комментарии:
1. Что такое координаты? Почему входные данные
(2,2)
соответствуют выходным[1,3,6]
данным? Что должны представлять дваInt
входа дляindex
?2. уровень и номер элемента. (0 0) -> 1; (1 0) -> 2; (2 1) -> 5
Ответ №1:
Поскольку это домашнее задание, я не буду давать полное решение, но некоторые подсказки:
- как вы представляете пустое дерево с вашим типом дерева?
- как вы представляете дерево примера (или любое другое конечное дерево)?
Учитывая основную функцию: она необязательно нужна, хороший способ начать — запустить
ghci your_source_file.hs
Затем вы можете оценить части вашей программы, например:
fromRoot 2 3 t1 -- if you have a t1 is a tree
Кроме того, вы могли бы написать основную функцию, подобную этой:
test_tree = ... -- you need to fill in the dots (see questions above)
main :: IO ()
main = do print (fromRoot 2 2 test_tree)
Если вам нужно найти какую-либо документацию, используйте http://haskell.org/hoogle /
Комментарии:
1.
test_tree = myBuild 1
это создает мое дерево ячеек. Я понимаю, что мне нужна некоторая рекурсия вfromRoot
и некоторое сравнение, но как это правильно написать, я не знаю : (2.
test_tree
бесконечно, вероятно, не то, что вы хотите. Вы должны вывести дерево из Show:data Tree a = Node (Tree a) a (Tree a) deriving Show
. Затем вы можете попытаться вычислитьmyBuild 1
в ghci (Ctrl-C вам поможет ;-)).3. Лучшим термином было бы «выводить отображение для дерева».
4. Извините, ребята, но я не понимаю, как это должно быть. Не могли бы вы предоставить мне полное решение, пожалуйста.
5. Какие конкретные вопросы у тебя есть, ПеПе? Вы подумали о вопросах, которые я вам задал? Вы использовали ghci? Без дополнительной информации вам действительно сложно помочь.