我正在尝试编写代码,如果给定树,将通过树并返回该树中的最小值,如果树为空,它将返回val。我现在所拥有的编译但不会运行。有什么帮助吗?
minValue :: Ord a => a -> BTree a -> a
minValue val Empty = val
minValue val (BNode v left Empty) = minimum [minValue v left]
minValue val (BNode v Empty right) = minimum [minValue v right]
minValue val (BNode v left right) = minimum ([minValue v left]++[minValue v right])
答案 0 :(得分:2)
我假设BTree
被定义为
data BTree a = Empty | BNode a (BTree a) (BTree a) deriving (Eq, Show)
虽然供将来参考,但请在您的问题中包含数据类型定义。
这里解决方案的关键是节点的最小值是其值的最小值和每个分支的最小值:
minValue :: Ord a => a -> BTree a -> a
minValue val Empty = val
minValue val (BNode v left right) =
let leftMin = minValue val left
rightMin = minValue val right
in ???
不要担心左边还是右边是Empty
,而只是信任递归来处理它。如果left
为Empty
,则minValue val left
将为val
,right
也类似。然后,您要在范围内有4个值,以确定最小值val
,v
,leftMin
和rightMin
。你怎么能这样做?