1.二叉樹:樹中的任何節點的值大於它的左子節點,且小於它的右子節點。算法
2.平衡二叉樹:一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,而且左右兩個子樹都是一棵平衡二叉樹。.net
3.紅黑樹:節點是紅色或者黑色的平衡二叉樹,它經過顏色的約束來維持着二叉樹的平衡。3d
規則:每一個節點都只能是紅色或者黑色;根節點是黑色;每一個葉節點(NIL節點,空節點)是黑色的;若是一個結點是紅的,則它兩個子節點都是黑的。也就是說在一條路徑上不能出現相鄰的兩個紅色結點;從任一節點到其每一個葉子的全部路徑都包含相同數目的黑色節點。blog
4.treeMap是紅黑樹算法的實現。排序
5,。紅黑樹增長節點:插入新節點老是紅色節點 ;若是插入節點的父節點是黑色, 能維持性質 ;若是插入節點的父節點是紅色, 破壞了性質. 故插入算法就是經過從新着色或旋轉, 來維持性質 。遞歸
6.插入節點:二叉樹
一.爲根節點:若新插入的節點N沒有父節點,則直接當作根據節點插入便可,同時將顏色設置爲黑色。(如圖一(1))循環
二.父節點爲黑色:這種狀況新節點N一樣是直接插入,同時顏色爲紅色,因爲根據規則四它會存在兩個黑色的葉子節點,值爲null。同時因爲新增節點N爲紅色,因此經過它的子節點的路徑依然會保存着相同的黑色節點數,一樣知足規則5。(如圖一(2))方法
三.若父節點P和P的兄弟節點U都爲紅色: 對於這種狀況若直接插入確定會出現不平衡現象。怎麼處理?P、U節點變黑、G節點變紅。這時因爲通過節點P、U的路徑都必須通過G因此在這些路徑上面的黑節點數目仍是相同的。可是通過上面的處理,可能G節點的父節點也是紅色,這個時候咱們須要將G節點當作新增節點遞歸處理。im
四.若父節點P爲紅色,叔父節點U爲黑色或者缺乏,且新增節點N爲P節點的右孩子: 對於這種狀況咱們對新增節點N、P進行一次左旋轉。這裏所產生的結果其實並無完成,還不是平衡的(違反了規則四),這是咱們須要進行狀況5的操做。
五.父節點P爲紅色,叔父節點U爲黑色或者缺乏,新增節點N爲父節點P左孩子: 這種狀況有多是因爲狀況四而產生的,也有可能不是。對於這種狀況先已P節點爲中心進行右旋轉,在旋轉後產生的樹中,節點P是節點N、G的父節點。可是這棵樹並不規範,它違反了規則4,因此咱們將P、G節點的顏色進行交換,使之其知足規範。開始時全部的路徑都須要通過G其餘們的黑色節點數同樣,可是如今全部的路徑改成通過P,且P爲整棵樹的惟一黑色節點,因此調整後的樹一樣知足規範5。
對於排序二叉樹的建立,其添加節點的過程以下:
一、以根節點爲初始節點進行檢索。
二、與當前節點進行比對,若新增節點值較大,則以當前節點的右子節點做爲新的當前節點。不然以當前節點的左子節點做爲新的當前節點。
三、循環遞歸2步驟知道檢索出合適的葉子節點爲止。
四、將新增節點與3步驟中找到的節點進行比對,若是新增節點較大,則添加爲右子節點;不然添加爲左子節點。
參考文獻:http://blog.csdn.net/chenssy/article/details/26668941