Data Structure
  • 資料結構自學筆記
  • 1 - Stack & Queue
    • 1.1 - Stack
    • 1.2 - Queue
    • 1.3 - Stack and Queue
  • 2 - Tree & Binary Tree
    • 2.1 - Tree
    • 2.2 - Binary Tree
    • 2.3 - Binary Tree Traversal
    • 2.4 - Binary Search Tree
    • 2.5 - Heap
    • 2.6 - Thread Binary Tree
    • 2.7 - Tree and Binary Tree Conversion
    • 2.8 Advanced Trees
      • 2.8.1 - Min-Max Heap
      • 2.8.2 - Deap
      • 2.8.3 - Symmetric Min-Max Heap
      • 2.8.4 - Extended Binary Tree
      • 2.8.5 - AVL Tree
      • 2.8.6 - M-Way Search Tree
      • 2.8.7 - B Tree
      • 2.8.8 - Red-Black Tree
      • 2.8.9 - Optimal Binary Search Tree
      • 2.8.10 - Splay Tree
      • 2.8.11 - Leftest Heap
      • 2.8.12 - Binomial Heap
  • 3 - Search & Sort
    • 3.1 - Searching
    • 3.2 - Elementary Sorting
      • 3.2.1 - Insertion Sort
      • 3.2.2 - Selection Sort
      • 3.2.3 - Bubble Sort
      • 3.2.4 - Shell Sort
    • 3.3 - Sophisticated Sorting
      • 3.3.1 - Quick Sort
      • 3.3.2 - Merge Sort
      • 3.3.3 - Heap Sort
      • 3.3.4 - Radix Sort
      • 3.3.5 - Bucket Sort
      • 3.3.6 - Counting Sort
    • 3.4 - Summary
  • 4 - Graph
    • 4.1 - Intro
    • 4.2 - Graph Traversal
    • 4.3 - Spanning Tree
      • 4.3.1 - Kruskal's algorithm
      • 4.3.2 - Prim's algorithm
      • 4.3.3 - Sollin's algorithm
    • 4.4 - Shortest Path Length
      • 4.4.1 - Dijkstra's algorithm
      • 4.4.2 - Bellman-Ford algorithm
      • 4.4.3 - Floyd-Warshall algorithm
    • 4.5 - AOV Network
    • 4.6 - AOE Network
    • 4.7 - Others
Powered by GitBook
On this page
  • 1. 介紹
  • 2. 運作
  • 3. AVL Tree定理
  • 4. 比較
  1. 2 - Tree & Binary Tree
  2. 2.8 Advanced Trees

2.8.5 - AVL Tree

Previous2.8.4 - Extended Binary TreeNext2.8.6 - M-Way Search Tree

Last updated 6 years ago

1. 介紹

當我們處理的資料是動態的時候(Dynamic Data),二元搜尋樹有可能形成skewed的結構,造成Search()/Insert()/Delete()等運作的時間複雜度變為O(n)。因此引入AVL Tree來動態維持樹的高度,保持在最小的情況。

  1. 對任何一節點來說,左右子樹的高度差 ≤ 1

  2. 對任何一節點來說,左右子樹皆是AVL Tree

  3. Node's Balance Factor: HL−HRH_{L}-H_{R}HL​−HR​ ,AVL Tree中任何一點的值僅會是{0、1、-1}

2. 運作

2.1 AVL Tree不平衡的情況

加入新的節點可能造成不平衡的情況:

1.LL

2.LR

3.RL

4.RR

2.2 AVL Tree不平衡的情況調整原則

  1. 中間鍵值往上拉,小的放左,大的放右。

  2. 若有孤兒子點/樹,依照Binary Search Tree擺到正確位置。

3. AVL Tree定理

形成高度 HHH 的AVL Tree所需最少的節點數為 FH+2−1F_{H+2}-1FH+2​−1 ;最多節點數為2H−12^H-12H−1

使用數學歸納法證明:

  1. 高度為0時為空樹, F2−1=0F_{2}-1=0F2​−1=0 成立

  2. 假設高度為 H−1H-1H−1 時,此定理成立

  3. 當高度為 HHH 時,假設左子樹高度為 H−1H-1H−1 ,右子樹 H−2H-2H−2

根據2.假設,

左子樹最少節點數= F(H−1)+2−1=FH+1−1F_{(H-1)+2}-1=F_{H+1}-1F(H−1)+2​−1=FH+1​−1

右子樹最少節點數= F(H−2)+2−1=FH−1F_{(H-2)+2}-1=F_{H}-1F(H−2)+2​−1=FH​−1

所以整棵樹最少節點樹為 =(FH+1−1)+(FH−1)+1=FH+1+FH−1=FH+2−1=(F_{H+1}-1)+(F_{H}-1)+1\\=F_{H+1}+F_{H}-1\\=F_{H+2}-1=(FH+1​−1)+(FH​−1)+1=FH+1​+FH​−1=FH+2​−1

4. 比較

Array

LinkList

AVL Tree

search(x)

O(logn)

O(n)

O(logn)

search(kth)

O(1)

O(k)

O(logn)

delete(x)

O(n)

O(1)

O(logn)

delete(kth)

O(n-k)

O(k)

O(logn)

insert(x)

O(n)

O(1)

O(logn)

output in order

O(n)

O(n)

O(n)