紅黑樹,平衡二叉查找樹,但在每個結點上增加一個存儲位表示結點的顏色,可以是 Red 或 Black。
通過對任何一條從根到葉子的路徑上各個結點著色方式的限制,紅黑樹確保沒有一條路徑會比其他路徑長出兩倍,因而是接近平衡的。
紅黑樹,作為一棵二叉查找樹,滿足二叉查找樹的一般性質。
二叉查找樹
也稱有序二叉樹(ordered binary tree),或已排序二叉樹(sorted binary tree),是指一棵空樹或者具有下列性質的二叉樹:
- 若任意節點的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
- 若任意節點的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;
- 任意節點的左、右子樹也分別為二叉查找樹。
- 沒有鍵值相等的節點(no duplicate nodes)。
因為一棵由 n 個結點隨機構造的二叉查找樹的高度為 log(n),所以順理成章,二叉查找樹的一般操作的執行時間為O(log(n))。但二叉查找樹若退化成了一棵具有 n 個結點的線性鏈后,則這些操作最壞情況運行時間為O(n)。
紅黑樹雖然本質上是一棵二叉查找樹,但它在二叉查找樹的基礎上增加了著色和相關的性質使得紅黑樹相對平衡,從而保證了紅黑樹的查找、插入、刪除的時間復雜度最壞為O(log(n))。
平衡二叉查找樹
它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過 1,并且左右兩個子樹都是一棵平衡二叉查找樹。平衡二叉搜索樹的常用實現方法有紅黑樹、AVL、替罪羊樹、Treap、伸展樹等。
紅黑樹的 5 個性質
性質1:節點是紅色或黑色。
性質2:根節點是黑色。
性質3:每個葉節點(NIL 節點,空節點)是黑色的。
性質4:每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
性質5:從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。