我想知道是否有人知道互联网上某处我可以复制粘贴(用于学习目的)实现二进制搜索树,实现平衡和算法,以询问有多少节点小于a特别的价值。我希望能够查询此数据结构并询问“此数据结构中有多少节点< x?”完整的目的是回答后一种类型的查询,但平衡也很重要,因为我希望能够处理大量不平衡的条目序列。
我更喜欢Python,C,C ++或Java中的实现,但欢迎其他实现。
答案 0 :(得分:0)
如果仍然相关,则可以在每个节点中维护子树的大小,如
注意 FindComparable 函数。如果找到该对象,则返回其索引(小于搜索对象的节点数)。
如果搜索到的对象不在树中,您希望获得大于搜索对象的最小节点的索引。
注意找不到对象时索引会发生什么。 最后的 Node :: GetSize(Node :: GetRight(节点)))或 Node :: GetSize(Node :: GetLeft(node)))将被评估为0 ,所以你有2个案例:
因此,当找不到对象时,不是返回 Size(),而是返回:
index + (cmp < 0)?1:0;