【发布时间】:2019-10-10 07:04:42
【问题描述】:
data BinaryTree a = Null | Node (BinaryTree a) a (BinaryTree a)
deriving Show
type BSTree a = BinaryTree a
treeBSMax :: (Ord a) => BSTree a -> a
treeBSMax btree = case btree of
Null -> error
Node _ val Null -> val
Node _ val right -> treeBSMax right
treeBSMin :: (Ord a) => BSTree a -> a
treeBSMin btree = case btree of
Null -> error
Node Null val _ -> val
Node left val _ -> treeBSMax left
isBSTree :: (Ord a) => BinaryTree a -> Bool
isBSTree btree = case btree of
Null -> False
Node Null val Null -> True
Node lt val rt -> val > treeBSMin lt && val < treeBSMax rt
如何使用treeBSMin 和treeBSMax 作为isBSTree 的辅助函数来判断一棵树是否是二叉搜索树?
【问题讨论】:
-
为什么需要
treeBSMin和treeBSMax才能知道它是否是二叉树?您可以递归地工作,每次进一步进入树时都会设置第一个未设置的边界。 -
问题是我不知道如何递归比较树中的元素。
-
您只需在递归调用中使用参数,如此答案所示:stackoverflow.com/a/58305672/67579
-
请注意,在
isBSTree中,您考虑了两个子树都为空且两个子树都为非空的情况。这并不涵盖所有情况,并且会导致最小/最大辅助函数出错。 -
@chi a. “两个子树都是非空的”我没有看到。湾。错误比这严重得多。
标签: haskell tree binary-tree binary-search-tree predicate