【发布时间】:2017-09-06 17:07:06
【问题描述】:
您好,我正在尝试重建一棵二叉树,我几乎成功了,但它抛出了一个错误,我不知道为什么
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
【问题讨论】:
-
您将
leftInOrd而非rightInOrd传递给计算右子树的buildTree调用。
标签: haskell functional-programming binary-tree inorder preorder