AVL樹插入和刪除

1、AVL樹簡介html

AVL樹是一種平衡的二叉查找樹。spa

平衡二叉樹(AVL 樹)是
一棵空樹,或者
是具備下列性質的二叉排序樹:
    1它的左子樹和右子樹都是平衡二叉樹,
    2且左子樹和右子樹高度之差的絕對值不超過 1。.net

定義平衡因子(BF)爲該結點左子樹的高度減去右子樹的高度所得的高度差;AVL 樹任一結點平衡因子只能取-1,0,1;htm

 

2、AVL樹插入blog

插入:先查找被插入元素,若是存在,則不操做;若是不存在,則插入。排序

插入後就是調整和選擇的問題。二叉樹

 

咱們先看一下咱們會面臨怎麼樣的問題:程序

離插入點最近的失衡點可能很近,im

也可能很遠,因此咱們要如下面這種模型思考。d3

 

可能的旋轉有四種

1 LL型

2 LR型

3 RR型

4 RL型

 

爲何會只有這四種狀況

無非是

失衡點BF=2,左節點BF=1,LL;

失衡點BF=2,左節點BF=-1,LR;

失衡點BF=-2,右節點BF=-1,RR;

失衡點BF=-2,右節點BF=1,RL;

因此寫程序時,只要找到失衡點,根據BF就能判斷該執行哪一種旋轉。

 

還有點就是如何計算BF,程序的參考http://blog.sina.com.cn/s/blog_6c014ac00100l35o.html

 

3、AVL樹刪除

通常查找二叉樹刪除節點

    刪除的方案有不少,但通常都會旋轉下面這種,由於對整棵樹各個分支深度的影響較小。

    a.當被刪除節點n是葉子節點,直接刪除

    b.當被刪除節點n只有一個孩子,刪除n,用孩子替代該節點的位置

    c.當被刪除結點n存在左右孩子時,真正的刪除點應該是n的中序遍在前驅,或者說是左子樹最大的節點,以後n的值替換爲真正刪除點的值。這就把c歸結爲a,b的問題。

有了上面的規則,再結合http://www.cnblogs.com/Clingingboy/archive/2010/10/09/1846865.html便可

 

參考文章

http://blog.csdn.net/gabriel1026/article/details/6311339

http://blog.sina.com.cn/s/blog_6c014ac00100l35o.html

http://www.cnblogs.com/Clingingboy/archive/2010/10/09/1846865.html

相關文章
相關標籤/搜索