幾年前在葉子值,一個C#的過程中,我學會了寫字,看上去或多或少像這樣的二叉樹:樹木只有
data Tree a = Branch a (Tree a) (Tree a) | Leaf
我看到它的好處,它有它在分支上的值,允許快速和容易地查找和插入值,因爲它會在每個分支的根部一直向下遇到一個值,直到它碰到一個葉子,這個值沒有任何價值。
自從我開始學習Haskell,但是,我已經看到了很多樹的例子:
data Tree a = Branch (Tree a) (Tree a) | Leaf a
這個定義令我困惑。我看不出有上的元素數據不分支,因爲它最終會導致樹看起來像這樣的用處:
這對我來說,好像一個設計不佳的替代品。這也讓我懷疑它的查找時間,因爲它無法評估哪個分支去尋找它正在尋找的值;而是需要通過每個節點來找到它正在尋找的內容。
那麼,誰能介紹一下爲什麼第二個版本(葉子上的值)在Haskell中比第一個版本更普遍?
確定你可以在C#中做到這一點,它也相當簡單;如果你知道怎麼做 – 2015-01-26 21:41:18
它們只是兩種不同的數據結構,可能有不同的用途,優點,缺點(也許不是)。例如,'Data.IntMap'是後一種形式(數據只在葉子上),'Data.Map'是前者。兩者有什麼關係?文檔中有這樣的說法:「[IntMap]在聯合和交集等二元運算上表現尤其出色,但我的基準測試表明,與[Data.Map]相比,它在插入和刪除方面速度也快很多(」)。最後,我不會說第二個版本「更普遍」。 – user2407038 2015-01-26 21:55:27