クラスノート:ツリーテーブルの検索手法:平衡二分木(AVLツリー)

バランスのとれたバイナリツリー:空のバイナリソートツリー、または以下のプロパティを持つバイナリソートツリー:

ルートノードの左と右のサブツリーの深さは最大で1だけ異なる; rootルートノードの左の子ツリーと右側のサブツリーもバランスのとれた二分木です。
バランス係数:ノードのバランス係数は、ノードの左サブツリーの深さと右サブツリーの深さの差です。
ノードバランス係数= HL-HRの
バランスツリーノードバランス要因であってもよい10-1
最小不均衡サブツリー:平衡二分木の構築において、挿入ノードに最も近いノードを持ち、ルートとしてバランス係数の絶対値が1より大きいサブツリー
基本的な考え方:バイナリソートツリーを構築するプロセスでは、ノードが挿入されるたびに、まず挿入によってツリーのバランスが破壊されているかどうかを確認し、そうであれば、バイナリソートツリーを維持しながら、最小の不均衡サブツリーを見つけます。特性を前提として、最小不平衡サブツリー内のノード間のリンク関係を調整し、それに応じて回転させて、それを新しい平衡サブツリーにします。
ノードAを最小の不平衡サブツリーのルートノードとします。このサブツリーの平衡調整は、次の4つの状況で要約できます。1. LLタイプ 2、RRタイプ 3、LRタイプ 4、RLタイプ
平衡バイナリツリー- LLタイプ
ここに画像の説明を挿入

B=A->lchild;  
A->lchild=B->rchild;   
B->rchild=A; 
A->bf=0;   
B->bf=0
if (FA==NULL)   
	root=B;   
else  if (A==FA->lchild)    
	FA->lchild=B;  
else  
	FA->rchild=B; 

平衡二分木RRタイプ
ここに画像の説明を挿入

B=A->rchild;  
A->rchild=B->lchild;  
B->lchild=A;  
A->bf=0;   
B->bf=0
if (FA==NULL)      
	root=B;else  if (A==FA->lchild)      
	FA->lchild=B;else     
	FA->rchild=B; 

平衡二分木LR型
ここに画像の説明を挿入

B=A->lchild;
C=B->rchild;   
B->rchild=C->lchild;   
A->lchild=C->rchild;   
C->lchild=B;    
C->rchild=A; 

平衡二分木型RL
ここに画像の説明を挿入

B=A->rchild;    
C=B->lchild;   
B->lchild=C->rchild;   
A->rchild=C->lchild;   
C->lchild=A;  
C->rchild=B; 

要約すると、新しいノードSを平衡バイナリソートツリーに挿入する場合、主に次の3つのステップが含まれます。
(1)挿入位置を見つけ、不平衡ノードA(Aのバランス係数は0に等しくありません)。
(2)新しいノードSを挿入し、AからSへのパス上の各ノードのバランス係数を変更します。
(3)AとBのバランス係数に基づいて、不均衡の有無とその種類を判別し、それに応じて対処します。

公開された48件の元の記事 いいね25 2453にアクセス

おすすめ

転載: blog.csdn.net/qq_43628959/article/details/104270428