我知道STL map/set的主流实现使用黑红色的树。 我的问题是:这些实现是否在插入/删除元素时自动平衡树?std :: map自动平衡本身
如果不是,那么当元素被排序并插入时,它将始终附加到最右边的位置。最坏的查找成本是O(n)。
那么,黑红树自动平衡自身呢?
我知道STL map/set的主流实现使用黑红色的树。 我的问题是:这些实现是否在插入/删除元素时自动平衡树?std :: map自动平衡本身
如果不是,那么当元素被排序并插入时,它将始终附加到最右边的位置。最坏的查找成本是O(n)。
那么,黑红树自动平衡自身呢?
是的。红黑树执行节点旋转以确保树保持平衡
是的。在每次插入后的红黑树中,如果树不平衡,树中的一些元素将移动到新位置。
来自维基百科:*红黑树是一种**自我平衡**二叉搜索树。* – DeiDei
恕我直言,':: std :: map'应该使用一个B树并且校准过树节点到页面大小的小倍数。页面级别的引用地址将成为真正大型树木最大的性能问题之一。但是,是的,红黑树的定义是自我平衡的。 – Omnifarious