平衡二叉樹的調整

2021-06-23 06:54:22 字數 2280 閱讀 9059

轉網易部落格的
楓葉的文章
一、平衡二叉樹的構造

在一棵二叉查詢樹中插入結點後,調整其為平衡二叉樹。若向平衡二叉樹中插入乙個新結點後破壞了平衡二叉樹的平衡性。首先要找出插入新結點後失去平衡的最小子樹根結點的指標。然後再調整這個子樹中有關結點之間的鏈結關係,使之成為新的平衡子樹。當失去平衡的最小子樹被調整為平衡子樹後,原有其他所有不平衡子樹無需調整,整個二叉排序樹就又成為一棵平衡二叉樹

1.調整方法

(1)插入點位置必須滿足二叉查詢樹的性質,即任意一棵子樹的左結點都小於根結點,右結點大於根結點

(2)找出插入結點後不平衡的最小二叉樹進行調整,如果是整個樹不平衡,才進行整個樹的調整。

2.調整方式

(1)ll型

ll型:插入位置為左子樹的左結點,進行向右旋轉

由於在a的左孩子b的左子樹上插入結點f,使a的平衡因子由1變為2,成為不平衡的最小二叉樹根結點。此時a結點順時針右旋轉,旋轉過程中遵循「旋轉優先」的規則,a結點替換d結點成為b結點的右子樹,d結點成為a結點的左孩子。

(2)rr型

rr型:插入位置為右子樹的右孩子,進行向左旋轉

由於在a的右子樹c的右子樹插入了結點f,a的平衡因子由-1變為-2,成為不平衡的最小二叉樹根結點。此時,a結點逆時針左旋轉,遵循「旋轉優先」的規則,a結點替換d結點成為c的左子樹,d結點成為a的右子樹。

(3)lr型

lr型:插入位置為左子樹的右孩子,要進行兩次旋轉,先左旋轉,再右旋轉;第一次最小不平衡子樹的根結點先不動,調整插入結點所在的子樹,第二次再調整最小不平衡子樹。

由於在a的左子樹b的右子樹上插入了結點f,a的平衡因子由1變為了2,成為不平衡的最小二叉樹根結點。第一次旋轉a結點不動,先將b的右子樹的根結點d向左上旋轉提公升到b結點的位置,然後再把該d結點向右上旋轉提公升到a結點的位置。

(4)rl型

rl型:插入位置為右子樹的左孩子,進行兩次調整,先右旋轉再左旋轉;處理情況與lr類似。

平衡二叉樹
平衡二叉樹的要求是每個節點的左右子樹的高度之差不能超過1,這就有3種可能,左子樹比右子樹 的高度 大1 小1,相等,但是新插入的點是未知的,所以很有可能會打亂平衡,因此,要對不平衡的子樹進行調整,
調整方式就直接轉網易部落格的
楓葉的文章來說明
一、平衡二叉樹的構造

在一棵二叉查詢樹中插入結點後,調整其為平衡二叉樹。若向平衡二叉樹中插入乙個新結點後破壞了平衡二叉樹的平衡性。首先要找出插入新結點後失去平衡的最小子樹根結點的指標。然後再調整這個子樹中有關結點之間的鏈結關係,使之成為新的平衡子樹。當失去平衡的最小子樹被調整為平衡子樹後,原有其他所有不平衡子樹無需調整,整個二叉排序樹就又成為一棵平衡二叉樹

1.調整方法

(1)插入點位置必須滿足二叉查詢樹的性質,即任意一棵子樹的左結點都小於根結點,右結點大於根結點

(2)找出插入結點後不平衡的最小二叉樹進行調整,如果是整個樹不平衡,才進行整個樹的調整。

2.調整方式

(1)ll型

ll型:插入位置為左子樹的左結點,進行向右旋轉

由於在a的左孩子b的左子樹上插入結點f,使a的平衡因子由1變為2,成為不平衡的最小二叉樹根結點。此時a結點順時針右旋轉,旋轉過程中遵循「旋轉優先」的規則,a結點替換d結點成為b結點的右子樹,d結點成為a結點的左孩子。

(2)rr型

rr型:插入位置為右子樹的右孩子,進行向左旋轉

由於在a的右子樹c的右子樹插入了結點f,a的平衡因子由-1變為-2,成為不平衡的最小二叉樹根結點。此時,a結點逆時針左旋轉,遵循「旋轉優先」的規則,a結點替換d結點成為c的左子樹,d結點成為a的右子樹。

(3)lr型

lr型:插入位置為左子樹的右孩子,要進行兩次旋轉,先左旋轉,再右旋轉;第一次最小不平衡子樹的根結點先不動,調整插入結點所在的子樹,第二次再調整最小不平衡子樹。

由於在a的左子樹b的右子樹上插入了結點f,a的平衡因子由1變為了2,成為不平衡的最小二叉樹根結點。第一次旋轉a結點不動,先將b的右子樹的根結點d向左上旋轉提公升到b結點的位置,然後再把該d結點向右上旋轉提公升到a結點的位置。

(4)rl型

rl型:插入位置為右子樹的左孩子,進行兩次調整,先右旋轉再左旋轉;處理情況與lr類似。

平衡二叉樹例題 平衡二叉樹

acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...

二叉樹 平衡二叉樹

1.題目 給定乙個二叉樹,判斷這棵二叉樹是否是高度平衡的二叉樹 平衡二叉樹 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 2.題目分析 1 如果乙個節點的兩個子樹的深度之差超過1,則不是平衡二叉樹 2 如果乙個節點的兩個子樹的深度之差不超過1,則是平衡二叉樹 3.程式分析 1 若這棵二...

平衡二叉樹

平衡二叉樹 time limit 1000 ms memory limit 32768 kb submit 16 6 users accepted 6 6 users 所謂平衡 二叉樹就是 水星文,若看不懂請跳轉到下一題 你的任務判斷輸入的二叉樹是否為平衡二叉樹,是則輸出yes,否則輸出no。每行是...