紅黑樹、平衡二叉樹

紅黑樹介紹:轉載於:http://blog.csdn.net/eric491179912/article/details/6179908html

 

平衡二叉樹(AVL TREE)介紹轉(重點)於:http://www.cnblogs.com/abatei/archive/2008/11/17/1335031.html

 

1、紅黑樹的介紹spa

 紅黑樹是AVL樹的變種,紅黑樹經過一些着色法則確保沒有一條路徑會比其它路徑長出兩倍,於是達到接近平衡的目的。所謂紅黑樹,不只是一個二叉搜索樹,並且必須知足一下規則:
     一、每一個節點不是紅色就是黑色。
     二、根節點爲黑色。
     三、若是節點爲紅色,其子節點必須爲黑色。
     四、任意一個節點到到NULL(樹尾端)的任何路徑,所含之黑色節點數必須相同。.net

平衡二叉樹定義(AVL):它或者是一顆空樹,或者具備如下性質的二叉樹:它的左子樹和右子樹的深度之差的絕對值不超過1,且它的左子樹和右子樹都是一顆平衡二叉樹。3d


最小不平衡子樹:指離插入節點最近且以平衡因子的絕對值大於1的節點做爲根的子樹。 htm

平衡因子(bf):結點的左子樹的深度減去右子樹的深度,那麼顯然-1<=bf<=1;blog

  很顯然,平衡二叉樹是在二叉排序樹(BST)上引入的,就是爲了解決二叉排序樹的不平衡性致使時間複雜度大大降低,那麼AVL就保持住了(BST)的最好時間複雜度O(logn),因此每次的插入和刪除都要確保二叉樹的平衡,那麼怎麼保持平衡呢?

插入操做:排序

       在平衡二叉樹中插入結點與二叉查找樹最大的不一樣在於要隨時保證插入後整棵二叉樹是平衡的。那麼調整不平衡樹的基本方法就是: 旋轉,基本思路都是轉換到左旋和右旋。get

1) 右旋: 在最小平衡子樹根節點平衡因子>=2且在根節點的左孩子的左孩子插入元素,進行右旋class

       

 

2) 左旋: 在最小平衡子樹根節點平衡因子>=-2且在根節點的右孩子的右孩子插入元素,進行左旋。二叉樹

 

3) 右左:最小平衡子樹根節點(80)的右孩子(100)的左孩子(90)的子節點(95)插入新元素,先繞根節點的右孩子節點(100)右旋,再圍根節點(80)左旋

 

4) 左右:在最小平衡子樹根節點(80)的左孩子(50)的右孩子(70)的子節點插入新元素,先繞根節點的左孩子節點(50)右旋,再圍根節點(80)左旋

相關文章
相關標籤/搜索