バランスのとれたバイナリツリー:空のバイナリソートツリー、または以下のプロパティを持つバイナリソートツリー:
⑴
ルートノードの左と右のサブツリーの深さは最大で1だけ異なる; rootルートノードの左の子ツリーと右側のサブツリーもバランスのとれた二分木です。
バランス係数:ノードのバランス係数は、ノードの左サブツリーの深さと右サブツリーの深さの差です。
ノードバランス係数= HL-HRの
バランスツリーノードバランス要因であってもよい1、0、-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のバランス係数に基づいて、不均衡の有無とその種類を判別し、それに応じて対処します。