上級プログラマのレッスン - 道路の建築家(9) - バランスの取れたバイナリツリー(AVL木)

免責事項:この記事はブロガーオリジナル記事です、続く BY-SAのCC 4.0を 著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/m0_37609579/article/details/99690222

バランスの取れたバイナリツリーの最初に、定義

検索ツリー(探索木)クエリ/アクションを追加/削除のうち、hは木の時間を過ごした高さに比例して、木は容量がnに比例しているではありません。あなたは木が維持させることができれば分厚い良い形状をhはおよそO(LG n)で、作業の完了に維持されるように、それは時間を節約することです。我々はありませんので、新規と長い探索木を削除曲がっ、バランスの取れた検索ツリー(バランス木)と呼ばれるの、良い数字を維持することができました。

Baiduの百科事典平衡二分木[](平衡二分木)以下の特性を有する:それは空のツリーの高さの差またはこれ以上1以下のその左右のサブツリーの絶対値であり、左右のサブツリーは平衡二分木です。平衡二分木を達成するために使用される方法が有する赤黒木AVL身代わりツリーTreapスプレー木等が挙げられます。

通常、平衡二分木は順序木、特性の全てを有する二分木、同じバイナリツリートラバーサルとトラバース動作です。それは、バイナリツリー上の追加制限を課し、その追加ので、しかし、バランスの取れたバイナリツリー率が維持されていることを確認しなければならない操作を削除します。

第二に、左右の手の木は再生する方法ですか?

アクションフィギュアを体験してください:からの参照最も簡単には黒の木を理解します

・|æ°è¿éåå¾çæè¿

Lコード:

D-コード:

第三に、不均衡の調整ノード

平衡二叉树中引入了一个概念:平衡二叉树节点的平衡因子,它指的是该节点的两个子树,即左子树和右子树的高度差,即用左子树的高度减去右子树的高度,如果该节点的某个子树不存在,则该子树的高度为0,如果高度差的绝对值超过1就要根据情况进行调整。

平衡的调整共有四种情况:分别为LL,LR,RR,RL。

下面我们通过不断插入数据来说明几种不同的旋转方式:

注意:橘黄色的结点为旋转中心,黑色结点的为离插入结点最近的失衡结点。

(1)LR型

简单说明:最开始插入数据16,3,7后的结构如上图所示,结点16失去了平衡,3为16的左孩子,7为失衡结点的左孩子的右孩子,所以为LR型,接下来通过两次旋转操作复衡,先通过以3为旋转中心,进行左旋转,结果如图所示,然后再以7为旋转中心进行右旋转,旋转后恢复平衡了。

(2)LL型

简单说明:在上面恢复平衡后我们再次插入数据11和9,发现又失去平衡了,这次失衡结点是16,11是其左孩子,9为其失衡结点的左孩子的左孩子,所以是LL型,以失衡结点的左孩子为旋转中心进行一次右旋转即可。

(3)RR型

简单说明:进一步插入数据26后又再次失衡了,失衡结点为7,很明显这是RR型,以失衡结点的右孩子为旋转中心左旋转一次即可。

(4)RL型

再插入18后又再次失衡了,失衡结点为16,26为其右孩子,18为其右孩子的左孩子,为RL型,以失衡结点的右孩子为旋转中心,进行一次右旋转,然后再次已失衡结点的右孩子为旋转中心进行一次左旋转变恢复了平衡。

小总结:

这就是4种失衡后调整的旋转方式,其实只有两种,RR和LL,RL和LR本质上是一样的。下面我们再次插入数据14,15,完成我们最后数据的插入操作:

又是一次LR型,按前面操作就可以了。

四、应用场景

这个数据结构类似于双向链表,任意插入元素时都会自动排序,红黑树和平衡二叉树都使二叉树尽量平衡,从而使查询时和二分法类似。它适合的场合主要是:

  1. 需要时刻保证列表元素的有序排列;
  2. 需要频繁的增删和查询操作;
  3. 双方向イテレータではなく、任意の要素へのランダムアクセスに属します。

V.の概要

個人的に私はまた、不均衡の感触の組み合わせを必要とする画像を回転する方法を、この章では、理解することが非常に困難であると思います。

平衡二分の主な利点は、高速な検索に焦点を当てました。


私のマイクロチャネル公共数:アーキテクチャの聖書(ID:gentoo666)、共有Java乾燥、並行性の高いプログラミング、人気のある技術的なチュートリアル、および分散型マイクロサービス・テクノロジー、建築、デザイン、ブロック・チェーン・テクノロジー、人工知能、ビッグデータ、Javaのインタビュー質問だけでなく、最先端の情報とそんなに人気があります。ああ毎日更新!

参考文献:

  1. https://www.cnblogs.com/shixiangwan/p/7530015.html
  2. https://blog.csdn.net/wannuoge4766/article/details/83998377
  3. https://blog.csdn.net/qq_25940921/article/details/82183093
  4. https://blog.csdn.net/u014634338/article/details/42465089
  5. https://blog.csdn.net/sun_tttt/article/details/65445754
  6. https://blog.csdn.net/lemon_tree12138/article/details/50393548
  7. https://www.jianshu.com/p/4f3c8f134833
  8. https://blog.csdn.net/zxzxzx0119/article/details/80012812
  9. https://blog.csdn.net/buffoon1900/article/details/51330990

おすすめ

転載: www.cnblogs.com/anymk/p/11470512.html