对于易于编码的平衡二叉搜索树,我应该选择什么? 我想知道哪种平衡的BST在C++中是容易编码的,并且仍然具有大致等于O(Logn)的复杂性。

对于易于编码的平衡二叉搜索树,我应该选择什么? 我想知道哪种平衡的BST在C++中是容易编码的,并且仍然具有大致等于O(Logn)的复杂性。,c++,binary-search-tree,red-black-tree,treap,C++,Binary Search Tree,Red Black Tree,Treap,我已经尝试过红黑树,但希望有一个代码不那么复杂的替代方案。我过去曾使用过Treaps,但我对探索性能更好或更易于实现的选项感兴趣 你的建议是什么?根据我的经验,AVL树通常比Treaps性能更好,而且它们并不难实现 它们通过旋转在任何插入或删除后变得不平衡的树的分支来工作。这保证了他们将有完美的平衡,所以他们不会被奇怪的数据“欺骗” 另一方面,treap是随机分布的,这对于大型数据集来说是接近平衡的,但仍然没有得到完美的O(logn)。此外,您可能碰巧遇到一个以非常不平衡的方式插入的数据集,您

我已经尝试过红黑树,但希望有一个代码不那么复杂的替代方案。我过去曾使用过Treaps,但我对探索性能更好或更易于实现的选项感兴趣


你的建议是什么?

根据我的经验,AVL树通常比Treaps性能更好,而且它们并不难实现

它们通过旋转在任何插入或删除后变得不平衡的树的分支来工作。这保证了他们将有完美的平衡,所以他们不会被奇怪的数据“欺骗”

另一方面,treap是随机分布的,这对于大型数据集来说是接近平衡的,但仍然没有得到完美的O(logn)。此外,您可能碰巧遇到一个以非常不平衡的方式插入的数据集,您的访问时间可能接近O(n)


查看维基百科页面了解更多信息:

很抱歉,你错了。treaps中随机性的来源不是数据集。没有任何平衡的正常BST在随机数据集上表现良好。在treaps中,我们提供了我们自己的随机性,就像在快速排序中一样,所以最坏的情况不能被输入强制。