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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

AVL Trees (Balanced binary search trees)

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

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

這個(gè)時(shí)候我們?cè)侔错樞虿迦?、2、3、4、5、6,一定是這樣,不會(huì)變成一棵“斜樹”。

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

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

插入1、2、3。

我們注意看:當(dāng)我們插入了1、2 之后,如果按照二叉查找樹的定義,3 肯定是要在2 的右邊的,這個(gè)時(shí)候根節(jié)點(diǎn)1 的右節(jié)點(diǎn)深度會(huì)變成2,但是左節(jié)點(diǎn)的深度是0,因?yàn)樗鼪]有子節(jié)點(diǎn),所以就會(huì)違反平衡二叉樹的定義。

那應(yīng)該怎么辦呢?因?yàn)樗怯夜?jié)點(diǎn)下面接一個(gè)右節(jié)點(diǎn),右-右型,所以這個(gè)時(shí)候我們要把2 提上去,這個(gè)操作叫做左旋。

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

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

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

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

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

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

第二個(gè)是數(shù)據(jù)的磁盤地址,因?yàn)樗饕淖饔镁褪侨ゲ檎覕?shù)據(jù)的存放的地址。

第三個(gè),因?yàn)槭嵌鏄?#xff0c;它必須還要有左子節(jié)點(diǎn)和右子節(jié)點(diǎn)的引用,這樣我們才能找到下一個(gè)節(jié)點(diǎn)。比如大于26 的時(shí)候,走右邊,到下一個(gè)樹的節(jié)點(diǎn),繼續(xù)判斷。

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

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

?

總結(jié)

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

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