您好我一直在寻找一些关于如何在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