1. 程式人生 > >平衡二叉排序樹的插入

平衡二叉排序樹的插入

插入結果:保證插入一個關鍵字不在原來樹中的節點後,仍為平衡排序二叉樹。

前提說明:這裡對插入後仍是排序二叉樹的操作不做說明。 假如插入新節點後,仍是一棵排序二叉樹,

                但不是平衡二叉樹時:為使得插入後仍是一棵平衡二叉樹,可以依據以下思路進行調整樹。

方式:1.首先找到最小樹。即離插入節點最近的失衡祖先節點,以該節點為根的樹便是最小樹。

          2.接下來研究物件就是最小樹。若插入位置是在該最小樹的子樹的根節點的子樹上,則記

LL型,類似有LR,RL,RR型,那麼,

         (1)首先明確調整後最小樹的根節點(新根節點)為:LL

型是最小樹根節點的孩子;RR型是

             最 小樹根節點的孩子;LR型是最小樹根節點的孩子的孩子;RL型是最小樹的根節點

             的孩子的孩子。

      (2)對LL型:以新根節點為軸,順時針旋轉它的父節點為根的樹,作為新根節點的右孩子。

                            新根節點原來的右孩子,做父節點的左孩子。

              對RR型:以新根節點為軸,逆時針旋轉它的父節點為根的樹,作為新根節點的左孩子。

                            新根節點原來的左孩子,做父節點的右孩子。

              注意:以下兩種型別旋轉時,新根節點的父節點和祖父節點看做分開的。不一起旋轉。

              對LR型:以新根節點為軸,逆時針旋轉它的父節點為根的樹,作為新根節點的左孩子。

                            新根節點的原來的左孩子,做父節點的右孩子。

                            以新根節點為軸,順時針旋轉它的祖父節點為根的樹,作為新根節點的右孩子。

                            新根節點原來的右孩子,做祖父節點的左孩子。

             對RL型:以新根節點為軸,順時針旋轉它的父節點為根的樹,作為新根節點的右孩子。

                            新根節點的原來的右孩子,做父節點的左孩子。

                            以新根節點為軸,逆時針旋轉它的祖父節點為根的樹,作為新根節點的左孩子。

                            新根節點原來的左孩子,做祖父節點的右孩子。

            總結:新根節點根據最小樹型別找。 順時針旋轉做右孩子,原來右孩子做左孩子,反之則相反。