資料結構與演算法——AVL樹簡介
二叉樹 |
|
---|
自平衡二叉查詢樹 |
|
---|
B樹 |
|
---|
Trie |
|
---|
空間劃分樹 |
|
---|
非二叉樹 |
|
---|
其他型別 |
|
---|
二叉樹:
任何節點最多隻允許有兩個子節點。
二叉搜尋樹:
可以提供對數時間的元素插入和訪問。任何節點的鍵值一定大於其左子樹中的每一個節點的鍵值,並不小於其右子樹中的每一個節點的鍵值。
平衡二叉搜尋樹:
平衡的意思是,沒有任何一個節點過深(深度過大)。二叉搜尋樹可能會在多次插入或刪除之後,變得不平衡。
AVL-tree是一個"加上了額外平衡條件"的二叉搜尋樹,其平衡條件的建立是為了確保整棵樹的深度為O(logN)。要求任何節點的左右子樹高度相差最多1。
根節點到任一節點的路徑長度,即所謂該節點的深度。根節點的深度永遠為0.
平衡樹和不平衡樹的區別:
插入節點11之後,樹變得不平衡了:
插入節點破壞了平衡條件的四種情況:
情況1,4對稱,稱為外側插入,可以採用單旋轉操作調整解決。
情況2,3對稱,稱為內側插入,可以採用雙旋轉操作調整解決。
單旋轉(旋轉的情況為外側插入):
雙旋轉(旋轉的情況為內側插入):
對於雙旋轉的情況,有一個特殊之處,比如上圖,因為插入了15,引起了18的不平衡。15肯定是介於18和18的左子樹之間的值。此時肯定要雙旋轉。
如果15的父節點不是18的子節點(上面的情況)雙旋轉其實就是將15的父節點代替18結點。(當然還是要旋轉的,這只是一個特點)
如果15的父節點16是7的子節點(下面的情況)雙旋轉其實就是將15節點代替7結點。(當然還是要旋轉的,這只是一個特點)
相關文章
- 資料結構與演算法:AVL樹資料結構演算法
- [演算法] 資料結構之AVL樹演算法資料結構
- 資料結構 - AVL 樹資料結構
- 【資料結構】AVL樹!!!資料結構
- 資料結構與演算法——RB樹簡介資料結構演算法
- 資料結構之「AVL樹」資料結構
- 演算法與資料結構——AVL樹(平衡二叉搜尋樹)演算法資料結構
- AVL 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 資料結構與演算法-二叉查詢樹平衡(AVL)資料結構演算法
- 資料結構與演算法——AVL樹類的C++實現資料結構演算法C++
- 資料結構和演算法-二叉樹,AVL,紅黑樹資料結構演算法二叉樹
- 看圖輕鬆理解資料結構與演算法系列(AVL樹)資料結構演算法
- 資料結構中樹形結構簡介資料結構
- 演算法與資料結構——圖簡介演算法資料結構
- 資料結構 AVL樹和紅黑樹的定義資料結構
- 演算法與資料結構--簡析紅黑樹演算法資料結構
- python演算法與資料結構-資料結構中常用樹的介紹(45)Python演算法資料結構
- 【資料結構和演算法】Trie樹簡介及應用詳解資料結構演算法
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 資料結構簡介資料結構
- 【資料結構與演算法】二叉樹資料結構演算法二叉樹
- 05 Javascript資料結構與演算法 之 樹JavaScript資料結構演算法
- 資料結構與演算法:哈夫曼樹資料結構演算法
- 《Python資料結構與演算法(影片教學版)》簡介Python資料結構演算法
- PHP7資料結構與演算法分析:第一章--資料結構和演算法簡介PHP資料結構演算法
- python演算法與資料結構-演算法和資料結構介紹(31)Python演算法資料結構
- ffmpeg資料結構簡介資料結構
- Redis資料結構簡介Redis資料結構
- 通過有序線性結構構造AVL樹
- 資料結構與演算法(十三)——紅黑樹1資料結構演算法
- 資料結構與演算法(十三)——紅黑樹2資料結構演算法
- 【資料結構與演算法】手撕紅黑樹資料結構演算法
- 資料結構與演算法:二叉排序樹資料結構演算法排序
- 資料結構與演算法——單詞查詢樹資料結構演算法
- javascript資料結構與演算法-- 二叉樹JavaScript資料結構演算法二叉樹
- 資料結構高階--AVL(平衡二叉樹)(圖解+實現)資料結構二叉樹圖解
- 資料結構與演算法——赫夫曼樹(哈夫曼樹)資料結構演算法
- 資料結構之MySQL獨愛B+樹(二叉樹、AVL樹、紅黑樹、B樹對比)資料結構MySql二叉樹