我知道STL map/set的主流實現使用黑紅色的樹。 我的問題是:這些實現是否在插入/刪除元素時自動平衡樹?std :: map自動平衡本身
如果不是,那麼當元素被排序並插入時,它將始終附加到最右邊的位置。最壞的查找成本是O(n)。
那麼,黑紅樹自動平衡自身呢?
我知道STL map/set的主流實現使用黑紅色的樹。 我的問題是:這些實現是否在插入/刪除元素時自動平衡樹?std :: map自動平衡本身
如果不是,那麼當元素被排序並插入時,它將始終附加到最右邊的位置。最壞的查找成本是O(n)。
那麼,黑紅樹自動平衡自身呢?
是的。紅黑樹執行節點旋轉以確保樹保持平衡
是的。在每次插入後的紅黑樹中,如果樹不平衡,樹中的一些元素將移動到新位置。
來自維基百科:*紅黑樹是一種**自我平衡**二叉搜索樹。* – DeiDei
恕我直言,':: std :: map'應該使用一個B樹並且校準過樹節點到頁面大小的小倍數。頁面級別的引用地址將成爲真正大型樹木最大的性能問題之一。但是,是的,紅黑樹的定義是自我平衡的。 – Omnifarious