平衡樹 - AVL || Balanced Binary Search Tree

三個問題。 What/Why/How.


什麼是平衡樹? 平衡樹是 基於二叉搜索樹的 一種自動保持它的高度最小的一種樹。 通俗點說, 就是一個有着高度最小的二查搜索樹. [任意節點的子樹的高度差小於等於1 ]


爲什麼要有平衡樹? 請考慮一下兩個樹,對比來看。以下兩張圖都是二叉搜索樹, 但是很明顯能看出來當我們需要對其進行操作比如 插入刪除等,左邊的都會浪費更長時間。

                          



我直接扒的Wiki的圖.. 見諒。

AVL tree
Type Tree
Invented 1962
Invented by Georgy Adelson-Velsky and Evgenii Landis
Time complexity
in big O notation
  Average Worst case
Space O(n) O(n)
Search O(log n)[1] O(log n)[1]
Insert O(log n)[1] O(log n)[1]
Delete O(log n)[1] O(log n)[1]


對於搜索,大家一眼就能看明白,一眼不行就倆眼一起, 但是對於insert 和 刪除, 我們要重點研究下,因爲操作之後可能會引起高度失衡需要從新對樹結構進行平衡。

如何進行平衡呢?


一共四種情況。













自己動手做了一遍之後發現也很簡單。 主要是先看看長的那一塊的節點是屬於哪種類型 左左或者 左右等, 然後再找準 root 和 pivot,迎刃而解。


Reference: https://www.cpp.edu/~ftang/courses/CS241/notes/self%20balance%20bst.htm


有問題歡迎指出。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章