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
한 다음 목록을 정렬하여 동일한 지 여부를 찾는 것입니다. 조금 복잡합니다. 다른 모듈을 가져 오지 않고도이 작업을 수행 할 수 있습니까?
sort
~가 아니라 flattenTree
~에 있습니다.
flattenTree
먼저 정의하지 않습니다 .False
노드가 해당 노드를 기반으로하는 전체 하위 트리를 순회하지 않고 검색 속성을 위반하면 일찍 반환 할 수 있습니다 .