返回二叉树中的最小值

时间:2015-04-02 20:53:21

标签: haskell binary-tree

我正在尝试编写代码,如果给定树,将通过树并返回该树中的最小值,如果树为空,它将返回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])

1 个答案:

答案 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,而只是信任递归来处理它。如果leftEmpty,则minValue val left将为valright也类似。然后,您要在范围内有4个值,以确定最小值valvleftMinrightMin。你怎么能这样做?