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)
Run Code Online (Sandbox Code Playgroud)
我想做的是编写一个函数来确定给定的树是否是二叉搜索树,我的方法是将所有值分组到一个列表中并导入Data.List,然后对列表进行排序以查找它们是否相等,但是有点复杂。我们可以不导入其他模块就能做到吗?
data BinaryTree a = Null | Node (BinaryTree a) a (BinaryTree a)
deriving Show
data RoseTree a = RoseNode a [RoseTree a]
deriving Show
binaryTreeToRose :: BinaryTree a -> RoseTree a
binaryTreeToRose btree = case btree of
Node Null a Null -> RoseNode a []
Node left a Null -> RoseNode a [binaryTreeToRose left]
Node Null a right -> RoseNode a [binaryTreeToRose right]
Node left a right -> RoseNode a [binaryTreeToRose left]++[binaryTreeToRose right]
Run Code Online (Sandbox Code Playgroud)
I try to write a function to …