После того, как это исправить, кажется, все работает хорошо.
т, я пытаюсь восстановить двоичное дерево, я почти получил его, за исключением того, что он выдает ошибку, и я не знаю, почему
buildTree :: (Ord a, Eq a) => [a] -> [a] -> Tree a
buildTree [] [] = Empty
buildTree preOrd inOrd = Node root left right
where root = head preOrd
left = buildTree leftPreOrd leftInOrd
right = buildTree rigthPreOrd leftInOrd
Just rootInd = elemIndex root inOrd
leftPreOrd = tail (take (rootInd + 1) preOrd)
rigthPreOrd = tail (drop rootInd preOrd)
leftInOrd = take rootInd inOrd
rightInord = drop (rootInd + 1) inOrd
Когда я звоню с помощью
buildTree [10,5,2,6,14,12,15] [2,5,6,10,12,14,15]
это бросает меня это:
Exception: reconstruir.hs:26:11-45: Irrefutable pattern failed for pattern Just rootInd