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
ก่อนได้หากโหนดละเมิดคุณสมบัติการค้นหาโดยไม่ต้องเข้าไปสำรวจทรีย่อยทั้งหมดที่ถูกรูทที่โหนดนั้น