哪里可以找到平衡树实现?

时间:2011-10-12 16:57:37

标签: data-structures

我想知道是否有人知道互联网上某处我可以复制粘贴(用于学习目的)实现二进制搜索树,实现平衡和算法,以询问有多少节点小于a特别的价值。我希望能够查询此数据结构并询问“此数据结构中有多少节点< x?”完整的目的是回答后一种类型的查询,但平衡也很重要,因为我希望能够处理大量不平衡的条目序列。

我更喜欢Python,C,C ++或Java中的实现,但欢迎其他实现。

1 个答案:

答案 0 :(得分:0)

如果仍然相关,则可以在每个节点中维护子树的大小,如

http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=12347&zep=HeightBalancedTree.h&rzp=%2fKB%2farchitecture%2favl_cpp%2f%2favl_cpp.zip

注意 FindComparable 函数。如果找到该对象,则返回其索引(小于搜索对象的节点数)。

如果搜索到的对象不在树中,您希望获得大于搜索对象的最小节点的索引。

注意找不到对象时索引会发生什么。 最后的 Node :: GetSize(Node :: GetRight(节点))) Node :: GetSize(Node :: GetLeft(node)))将被评估为0 ,所以你有2个案例:

  • 如果最后一个转弯是正确的(cmp> 0),您将获得最大节点的索引,该索引小于搜索到的对象加一个 - 这正是您想要的值。
  • 如果剩下最后一个转弯(cmp< 0),您将获得最小节点的索引,该索引大于搜索到的对象减去一个

因此,当找不到对象时,不是返回 Size(),而是返回:

index + (cmp < 0)?1:0;