0

我已經按照指導,以創建它使用以下數據類型的二叉搜索樹:Haskell - 使用遞歸的代數數據類型?

data BinarySearchTree a = EmptyTree | TreeNode a (BinarySearchTree a) (BinarySearchTree a) deriving (Show, Read, Eq) 

我是正確地說「樹節點」是使用遞歸,即建立自己的數據類型的2個元素「( BinarySearchTree a)(BinarySearchTree a)'?

我從來沒有見過這樣的數據類型,任何簡短的解釋都會很棒!

+1

它與列表類型非常相似(它也是遞歸的),除了它遞歸兩次(樹中兩個節點的分支)而不是一次(在列表中,一個單元格只有一個尾部) 。 – chi

+0

從技術上講,'TreeNode' *需要*兩個'BinarySearchTree'值(和一個'a'值)並*返回一個新的'BinarySearchTree'值。 *類型*是遞歸定義的。 – chepner

+0

TreeNode不*創建*任何東西。 – immibis

回答

5

是的,這是一個遞歸數據類型。

我推薦Learn You A Haskell For Great Good的相關章節 - 這對初學者非常友好。它描述了您的具體情況,也:

這裏我們要說的話:一棵樹或者是一個空的樹或它的 包含一定的價值和兩棵樹的元素。聽起來像一個完美適合代數數據類型的 !