<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
二元搜尋樹雖可以縮短查詢的效率,但如果資料有序或接近有序二元搜尋樹將退化為單支樹,查詢元素相當於在順序表中搜尋元素,效率低下。
因此,兩位俄羅斯的數學家G.M.Adelson-Velskii和E.M.Landis在1962年發明了一種解決上述問題的方法:當向二元搜尋樹中插入新結點後,如果能保證每個結點的左右子樹高度之差的絕對值不超過1(需要對樹中的結點進行調整),即可降低樹的高度,從而減少平均搜尋長度。
一棵AVL樹或者是空樹,或者是具有以下性質的二元搜尋樹:
它的左右子樹都是AVL樹
左右子樹高度之差(簡稱平衡因子)的絕對值不超過1(-1/0/1)
平衡因子= 右子樹高度-左子樹高度
如果一棵二元搜尋樹是高度平衡的,它就是AVL樹。如果它有n個結點,其高度可保持在O(log2N) ,搜尋時間複雜度O(log2N)
節點結構:三叉鏈結構(左、右、父),以及平衡因子bf+建構函式(左右為空,平衡因子初始化為0)
template<class K,class V> struct AVLTreeNode { pair<K, V> _kv; AVLTreeNode<K, V>* _left; AVLTreeNode<K, V>* _right; AVLTreeNode<K, V>* _parent; int _bf;//balance factor AVLTreeNode(const pair<K,V>&kv) :_kv(kv) ,_left(nullptr) ,_right(nullptr) ,_parent(nullptr) ,_bf(0) {} };
AVL樹在二元搜尋樹的基礎上引入了平衡因子,因此AVL樹也可以看成是二元搜尋樹。步驟過程:
找到插入的位置:根據二元搜尋樹的做法
進行插入:判斷插入的位置是parent的左還是右
更新平衡因子:如果不平衡的話,就要進行旋轉
找到插入位置(比較節點大小即可):
>
當前位置的key值,往右子樹走<
當前位置的key值,往左子樹走插入之後,與二元搜尋樹不同的是:我們還需要去進行平衡因子的更新,調平衡:
如果新增加的在右,平衡因子加加
如果新增加的在左,平衡因子減減
更新一個結點之後我們需要去進行判斷,子樹的高度是否發生了變化:
1.如果parent的平衡因子是0:說明之前parent的平衡因子是1或-1,說明之前parent一邊高、一邊低;這次插入之後填入矮的那邊,parent所在的子樹高度不變,不需要繼續往上更新
2.如果parent的平衡因子是1或者-1:說明之前parent的平衡因子是0,兩邊一樣高,插入之後一邊更高,parent所在的子樹高度發生變化,繼續往上更新
3.平衡因子是2或-2,說明之前parent的平衡因子是1或-1,現在插入嚴重不平衡,違反規則,需要進行旋轉處理
最壞的情況下:需要一直更新到根root:
我們更新平衡因子時第一個更新的就是parent,如果parent->_bf1或parent->_bf-1需要繼續往上進行平衡因子的更新,向上迭代,直到parent為空的情況:
else if (parent->_bf == 1 || parent->_bf == -1) { cur = parent; parent = parent->_parent; }
當parent->_bf = 2或parent->_bf==-2時,我們就需要進行旋轉了:
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45