【发布时间】:2019-10-09 12:24:24
【问题描述】:
type BSTree a = BinaryTree a
data BinaryTree a = Null | Node (BinaryTree a) a (BinaryTree a)
deriving Show
flattenTree :: BinaryTree a -> [a]
flattenTree tree = case tree of
Null -> []
Node left val right -> (flattenTree left) ++ [val] ++ (flattenTree right)
isBSTree :: (Ord a) => BinaryTree a -> Bool
isBSTree btree = case btree of
Null -> False
tree -> (flattenTree tree) == sort (flattenTree tree)
我要做的是写一个函数来判断给定的树是否是二叉搜索树,我的方法是将所有值分组到一个列表中并导入Data.List然后对列表进行排序以查找是否它们是平等的,但有点复杂。我们可以在不导入其他模块的情况下做到这一点吗?
【问题讨论】:
-
我不会先定义
flattenTree。如果节点违反搜索属性,您可以提前返回False,而无需遍历以该节点为根的整个子树。 -
@chepner 问题出在
sort,而不是flattenTree,这已经够懒了。 -
是的,在查看其他一些答案后,我想到了这一点。
标签: haskell tree binary-tree binary-search-tree predicate