平衡二叉樹的調整


不平衡的發現者:在插入一個結點后,從下往上數的第一個平衡因子(左子樹的高度-右子樹的高度)變為2或者-2的結點。

麻煩結點:破壞了平衡的結點,就是剛剛插入的結點

平衡二叉樹有四種失衡模式,對應四種解決方式:

1.RR旋轉

需要RR旋轉的情況:麻煩結點在不平衡發現者的右子樹的右子樹上,因而叫RR插入,需要RR旋轉;

方法:把不平衡發現者的右兒子提到不平衡發現者的位置,使他成為新的根,而不平衡發現者則插入到之前他右兒子的左兒子上,新根之前的左兒子插入到不平衡發現者的右兒子上面。具體如圖:

1 tree *RR(tree *root)
2 {
3     tree *temp = root->r;
4     root->r = temp->l;
5     temp->l = root;
6     root->h = max(height(root->l),height(root->r))+1;
7     temp->h = max(height(temp->l),height(temp->r))+1;
8 }

 2.LL旋轉

需要LL旋轉的情況:麻煩結點在不平衡發現者的左子樹的左子樹上,因而叫LL插入,需要LL旋轉;

方法:把不平衡發現者的左兒子提到不平衡發現者的位置,使他成為新的根,而不平衡發現者則插入到之前他左兒子的右兒子上,新根之前的右兒子插入到不平衡發現者的左兒子上面。具體如圖:

 

 

1 tree *LL(tree *root)
2 {
3     tree *temp;
4     temp=root->l;
5     root->l=temp->r;
6     temp->r=root;
7     root->h = max(height(root->l),height(root->r))+1;
8     temp->h = max(height(temp->l),height(temp->r))+1;
9 }

 3.LR旋轉

需要LR旋轉的情況:麻煩結點在不平衡發現者的左子樹的右子樹上,因而叫LR插入,需要LR旋轉;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM