AVL树学习笔记
AVL樹本質上還是一棵二叉搜索樹(因此讀者可以看到我后面的代碼是繼承自二叉搜索樹的),它的特點是:
本身首先是一棵二叉搜索樹。
帶有平衡條件:每個結點的左右子樹的高度之差的絕對值(平衡因子)最多為1。
AVL樹的查找平均時間復雜度要比二叉搜索樹低——它是O(logN)。
?
旋轉操作:
AVL樹是一顆平衡樹,其左右子樹的高度差不會超過一層。爲了保持這一性質,採用旋轉節點的方式來降低高度。
如下圖,紅色表示新插入的節點,一共4種情況:
- 左左:節點1插入到左子樹的左節點,導致節點5不平衡。
?
實際上我們只需要關心節點1、3、5,根據二叉搜索樹的性質(左 < 中 < 右),所以祇有節點3才可以作為父節點,於是將節點5繞節點3進行一次左旋,達到平衡。
?
- 右右:和左左類似,可以通過一次右旋來實現平衡,如下圖:
?
?
- 左右:這種情況光旋轉失衡的節點5是不夠的,因爲節點3是無法成爲父節點的,祇有節點4才有可能。
?
所以先把節點3右旋以使節點4居中,再將節點5左旋,共兩次旋轉實現平衡。
?
- 右左:和左右的情況類似,也是兩次,先左旋后右旋。
?
圖片出處:http://www.th7.cn/Program/net/201306/140050.shtml
?
代碼尚在醞釀中。
轉載于:https://www.cnblogs.com/IT-nerd/p/3477696.html
總結
- 上一篇: Windows_API_函数 参考大全
- 下一篇: Install marvel and h