您好我一直在尋找一些關於如何在F#中創建一個排序的二叉樹數據類型的好消息,但是我無法找到任何可以理解的東西。我檢查了msdn頁面上的例子,但我沒有得到它。排序二叉樹F#
Q
排序二叉樹F#
1
A
回答
3
如果你正在尋找一個現有的實現,那麼the FSharpX library有很多數據結構(包括一些樹)可用。雖然我不認爲它有一個簡單的排序二叉樹實現。你也可以訪問所有來自F#的.NET集合,但我不認爲.NET也有二叉樹。它有sorted list,這可能對你來說很好,這取決於你想要做什麼。
如果你想實現自己的,那麼你需要通過定義的數據類型開始代表樹:
type SortedTree<'T when 'T : comparison> =
| Node of SortedTree<'T> * 'T * SortedTree<'T>
| Leaf of 'T
的Node
元素意味着左邊的所有值都大於存儲的值越小在節點中,所有更大(或相等)的值都在右邊。我添加了一個約束條件'T : comparison
,這意味着您只能創建可比較元素的樹(這在實現中需要對樹進行排序)。
實現所有常見的樹操作將是相當多的工作,但是在插入一個簡單的嘗試(不保持任何形式營養均衡的樹)看起來是這樣的:
let rec insert element tree =
match tree with
| Leaf v when element < v -> Node(Leaf element, v, Leaf v)
| Leaf v -> Node(Leaf v, element, Leaf element)
| Node(left, key, right) when element < key -> Node(insert element left, key, right)
| Node(left, key, right) -> Node(left, key, insert element right)
的模式匹配處理4個有趣的案例:當樹是Leaf
時,您需要使用左側或右側的新元素構建新節點。當樹是Node
時,則要根據鍵的值向左或向右插入。
+0
我真的很贊同你的答案,真的很好解釋,但是如何我知道該功能是否有效?我的意思是它不像一棵樹在屏幕上顯示upp。是否還有任何方法可以將整個整數列表添加到樹中? – Ang
相關問題
- 1. 插入二叉樹不排序輸入
- 2. C中的二叉樹插入排序
- 3. 搜索未排序二叉樹
- 4. 排序字母使用二叉樹
- 5. 二叉搜索樹唯一排序?
- 6. 排序的二叉樹遍歷結果
- 7. 序言,二叉樹
- 8. 添加整數二叉樹F#
- 9. 二叉樹 - 哪一種二叉樹
- 10. 二叉樹到二叉搜索樹(BST)
- 11. 需要幫助二叉樹程序(非二叉搜索樹)
- 12. 二叉樹中序橫向
- 13. 二叉樹的C++程序
- 14. C程序:二叉樹
- 15. 如何在haskell中並行排序未排序的二叉樹葉子樹?
- 16. 二叉樹findHeight
- 17. balanced()二叉樹
- 18. 二叉樹
- 19. 二叉樹
- 20. JAVA:二叉樹
- 21. 二叉樹
- 22. 二叉樹
- 23. 非二叉樹
- 24. 二叉樹葉
- 25. Python二叉樹
- 26. 二叉樹值
- 27. OpenMP - 二叉樹
- 28. 二叉樹
- 29. 二叉樹,基於前序構建樹
- 30. 二叉搜索樹中序樹顯示
到目前爲止你有什麼?我們希望看到您的(不完整)數據類型和函數能夠提供建議。 – pad
由於這是封閉的,我只是發佈了幾年前我寫的一些舊代碼,這是F#中的AVL樹:http://fssnip.net/2i – thr