JDK TreeMap Red-Black Tree

介紹另外一種平衡二叉樹:紅黑樹(Red Black Tree),紅黑樹由Rudolf Bayer1972年發明,當時被稱爲平衡二叉B樹(symmetric binary B-trees),1978年被Leonidas J. Guibas  Robert Sedgewick改爲一個比較摩登的名字:紅黑樹。數據結構

紅黑樹和以前所講的AVL樹相似,都是在進行插入和刪除操做時經過特定操做保持二叉查找樹的平衡,從而得到較高的查找性能。自從紅黑樹出來後,AVL樹就被放到了博物館裏,聽說是紅黑樹有更好的效率,更高的統計性能。不過在我瞭解了紅黑樹的實現原理後,並不相信這是真的,關於這一點咱們會在後面進行討論。性能

紅黑樹和AVL樹的區別在於它使用顏色來標識結點的高度,它所追求的是局部平衡而不是AVL樹中的很是嚴格的平衡。以前咱們在講解AVL樹時,已經領教過AVL樹的複雜,但AVL樹的複雜比起紅黑樹來講簡直是小巫見大巫。紅黑樹是真正的變態級數據結構。ui

紅黑樹的平衡

紅黑樹首先是一棵二叉查找樹,它每一個結點都被標上了顏色(紅色或黑色),紅黑樹知足如下5個性質:spa

一、 每一個結點的顏色只能是紅色或黑色。效率

二、 根結點是黑色的。原理

三、 每一個葉子結點都帶有兩個空的黑色結點(被稱爲黑哨兵),若是一個結點n的只有一個左孩子,那麼n的右孩子是一個黑哨兵;若是結點n只有一個右孩子,那麼n的左孩子是一個黑哨兵。二叉樹

四、 若是一個結點是紅的,則它的兩個兒子都是黑的。也就是說在一條路徑上不能出現相鄰的兩個紅色結點。統計

五、 對於每一個結點來講,從該結點到其子孫葉結點的全部路徑上包含相同數目的黑結點。數據

相關文章
相關標籤/搜索