如果树是BST或不使用Haskell,则验证

时间:2015-09-30 18:16:03

标签: haskell

您好我是Haskell的新手,并尝试编写一个函数来检查树是否是二叉搜索树。

以下是我的代码: -

 data Tree = Node Int Tree Tree   
                | Leaf Int            
      deriving (Eq,Show)

val :: Tree -> Int
val (Leaf i) = i

isBst :: Tree -> Bool
isBst (Leaf i) = True
isBst (Node x l r) = if (x >  (val l )) && (x < (val r)) then True else False

但是当我执行它时,我收到以下错误。

<interactive>:10:1: Not in scope: ‘isBST’

任何人都可以帮我解决这个问题,或者帮我写一个方法determine if a tree is bst or not using haskell

您还可以帮助make this code exhaustive吗?

1 个答案:

答案 0 :(得分:4)

您当前的问题是您将功能命名为isBst(小写st),但尝试将其用作isBST(使用大写{ {1}}和S)。

除此之外,您的T函数并非详尽无遗,并且在使用val作为参数调用时会导致异常。您需要添加一个接受Node的案例并返回其值。

此外,您的Node函数将只查看树的根,即如果根的值介于其子树的值之间,它将返回isBst,而不关心是否使用子树他们自己排序。为了正常工作,它应该在子树上递归调用自己。

如果节点的值与其中一个子树的值相同,则您的函数也将返回True。如果树的构造方式永远不会包含重复,则无关紧要,但这应该是固定的。