Python的标准库 - 是否存在平衡二叉树的模块?

时间:2010-02-19 17:06:42

标签: python tree standard-library

在Python的标准库中是否有AVL或Red-Black模块或其他类型的平衡二叉树?我试图找到一个,但没有成功(我对Python比较新)。

7 个答案:

答案 0 :(得分:33)

不,stdlib中没有平衡的二叉树。但是,根据您的评论,听起来您可能还有其他选择:

  • 您说您想要一个BST而不是O(log n)次搜索列表。如果只需搜索并且您的数据已经排序,则bisect模块会为列表提供二进制搜索算法。
  • Mike DeSimone推荐了套装和字母,你解释了为什么列表在算法上太慢了。集合和dicts实现为散列表,其具有O(1)查找。 Python中大多数问题的解决方案实际上是“使用字典”。

如果这两种解决方案都不适合您,您必须转到第三方模块或实施自己的模块。

答案 1 :(得分:14)

答案 2 :(得分:9)

有一些实例我发现heapq package(在stadndard库中)很有用,特别是在任何给定时间你想要O(1)访问集合中最小元素的时间

对我来说,我正在跟踪一组计时器,并且通常只是想检查最小的时间(首先执行的那个)是否已准备就绪。

答案 3 :(得分:6)

有一个名为“bintrees”的新软件包支持ubalanced,AVL和RB树。你可以找到它here

答案 4 :(得分:4)

还查看Sorted Containers项目。

这是PyCon关于它的讨论:https://www.youtube.com/watch?v=7z2Ki44Vs4E

答案 5 :(得分:2)

不,但在SourceForge上有AVL Tree Objects for Python(非常老!)和(已关闭)项目 - avl-trees for Python

答案 6 :(得分:0)

我编写了Java版本的Java TreeMap / TreeSet的Python版本,其基础数据结构是平衡的二叉树(准确地说是红黑树)。

可以在this repo

中访问源代码和文档。

您可以使用pip install pytreemap安装。 经过Python> = 3.5

测试