Haskell,树问题

时间:2015-06-10 05:03:04

标签: haskell tree

data Tree a = Empty_Tree
 | Node {element :: a, left_tree, right_tree :: Tree a}
 deriving (Eq)
biep :: (Ord a) => Tree a -> Bool
biep tree = case tree of
 Empty_Tree -> True
 Node e left right ->
 (left == Empty_Tree || (e < element left && biep left )) &&
 (right == Empty_Tree || (e > element right && biep right))

以上代码可以正确编译。 如果biep树返回True,你能对树有什么看法?

2 个答案:

答案 0 :(得分:1)

如果树的有序遍历产生严格递减的序列,

biep将返回True

如果树是空的,这个说法是空的 - 序列是空的,因此严格减少。但是,如果它不是空的,那么我们需要检查一些事情

  • 左子(如果存在)的值大于当前节点
  • 右子(如果存在)的值小于当前节点
  • 两个孩子的树也遵守订单属性

希望有所帮助!

答案 1 :(得分:0)

希望我能够正确地重写它:

biep :: (Ord a) => Tree a -> Bool
biep Empty_Tree = True
biep (Node e left right) = (ibiep left e (<) )&& (ibiep right e (>))
                          where ibiep Empty_Tree _ _ = True
                                ibiep n@(Node en _ _) val op = ( e `op` en  ) && (biep n)

使用数据构造函数时必须包括括号。