7 回答
不,stdlib 中没有平衡二叉树。但是,根据您的评论,听起来您可能还有其他选择:
- 你说你想要一个 BST 而不是一个
O(log n)
搜索列表。如果您只需要搜索并且您的数据已经排序,则该bisect
模块为列表提供二进制搜索算法。 - Mike DeSimone 推荐了 set 和 dicts,你解释了为什么列表在算法上太慢了。集合和字典实现为哈希表,具有 O(1) 查找。Python 中大多数问题的解决方案实际上是“使用字典”。
如果这两种解决方案都不适合您,您将不得不使用第三方模块或实施您自己的模块。
据我所知,stdlib 中没有这种类型的东西,但是快速查看 pypi 会带来一些替代方案:
在某些情况下,我发现heapq 包(在标准库中)很有用,特别是如果在任何给定时间您希望 O(1) 访问集合中最小元素的时间。
对我来说,我一直在跟踪一组计时器,并且通常只是对检查最小的时间(首先执行的时间)是否已经准备就绪感兴趣。
还可以查看Sorted Containers项目。
这是关于它的 PyCon 讨论:https ://www.youtube.com/watch?v=7z2Ki44Vs4E
有一个名为“bintrees”的新软件包支持 ubalanced、AVL 和 RB 树。你可以在这里找到它。
不,但是有用于 Python 的 AVL 树对象(非常旧!)和 SourceForge 上的(关闭的)项目 -用于 Python 的 avl-trees。
我写了一个 Python 版本的 Java TreeMap/TreeSet,其底层数据结构是平衡的二叉树(准确地说是红黑树)。
您可以使用pip install pytreemap
. 测试 Python >=3.5