日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

平衡二叉树(AVL Tree)(左旋、右旋)

發(fā)布時間:2024/4/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 平衡二叉树(AVL Tree)(左旋、右旋) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

AVL Trees (Balanced binary search trees)

平衡二叉樹的定義:左右子樹深度差絕對值不能超過1。

是什么意思呢?比如左子樹的深度是2,右子樹的深度只能是1 或者3。

這個時候我們再按順序插入1、2、3、4、5、6,一定是這樣,不會變成一棵“斜樹”。

那它的平衡是怎么做到的呢?怎么保證左右子樹的深度差不能超過1 呢?

https://www.cs.usfca.edu/~galles/visualization/AVLtree.html

插入1、2、3。

我們注意看:當(dāng)我們插入了1、2 之后,如果按照二叉查找樹的定義,3 肯定是要在2 的右邊的,這個時候根節(jié)點1 的右節(jié)點深度會變成2,但是左節(jié)點的深度是0,因為它沒有子節(jié)點,所以就會違反平衡二叉樹的定義。

那應(yīng)該怎么辦呢?因為它是右節(jié)點下面接一個右節(jié)點,右-右型,所以這個時候我們要把2 提上去,這個操作叫做左旋。

同樣的,如果我們插入7、6、5,這個時候會變成左左型,就會發(fā)生右旋操作,把6提上去。

所以為了保持平衡,AVL 樹在插入和更新數(shù)據(jù)的時候執(zhí)行了一系列的計算和調(diào)整的操作。

平衡的問題我們解決了,那么平衡二叉樹作為索引怎么查詢數(shù)據(jù)?

在平衡二叉樹中,一個節(jié)點,它的大小是一個固定的單位,作為索引應(yīng)該存儲什么內(nèi)容?

它應(yīng)該存儲三塊的內(nèi)容:

第一個是索引的鍵值。比如我們在id 上面創(chuàng)建了一個索引,我在用where id =1 的條件查詢的時候就會找到索引里面的id 的這個鍵值。

第二個是數(shù)據(jù)的磁盤地址,因為索引的作用就是去查找數(shù)據(jù)的存放的地址。

第三個,因為是二叉樹,它必須還要有左子節(jié)點和右子節(jié)點的引用,這樣我們才能找到下一個節(jié)點。比如大于26 的時候,走右邊,到下一個樹的節(jié)點,繼續(xù)判斷。

如果是這樣存儲數(shù)據(jù)的話,我們來看一下會有什么問題。

在分析用AVL 樹存儲索引數(shù)據(jù)之前,我們先來學(xué)習(xí)一下InnoDB 的邏輯存儲結(jié)構(gòu)。

?

總結(jié)

以上是生活随笔為你收集整理的平衡二叉树(AVL Tree)(左旋、右旋)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。