在Python的标准库中是否有AVL或Red-Black模块或其他类型的平衡二叉树?我试图找到一个,但没有成功(我对Python比较新)。
答案 0 :(得分:33)
不,stdlib中没有平衡的二叉树。但是,根据您的评论,听起来您可能还有其他选择:
O(log n)
次搜索列表。如果只需搜索并且您的数据已经排序,则bisect
模块会为列表提供二进制搜索算法。如果这两种解决方案都不适合您,您必须转到第三方模块或实施自己的模块。
答案 1 :(得分:14)
在stdlib as far as I can see中没有此类内容,但是quick look at pypi brings up a few alternative:
答案 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