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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机考研8,计算机考研每日一练:第八天

發(fā)布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机考研8,计算机考研每日一练:第八天 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

平衡二叉樹實現(xiàn)原理

平衡二叉樹構(gòu)建的基本思想就是在構(gòu)建二叉排序樹的過程中,每當插入一個結(jié)點時,先檢查是否因插入而破壞了樹的平衡性,若是,則找出最小不平衡子樹。在保持二叉排序樹特性的前提下,調(diào)整最小不平衡子樹中各結(jié)點之間的鏈接關(guān)系,進行相應(yīng)的旋轉(zhuǎn),使之成為新的平衡子樹。 下面講解一個平衡二叉樹構(gòu)建過程的例子。現(xiàn)在又a[10] = {3, 2, 1, 4, 5, 6, 7, 10, 9, 8}需要構(gòu)建二叉排序樹。在沒有學習平衡二叉樹之前,根據(jù)二叉排序樹的特性,通常會將它構(gòu)建成如下左圖。雖然完全符合二叉排序樹的定義,但是對這樣高度達到8的二叉樹來說,查找是非常不利的。因此,更加期望構(gòu)建出如下右圖的樣子,高度為4的二叉排序樹,這樣才可以提供高效的查找效率。

現(xiàn)在來看看如何將一個數(shù)組構(gòu)成出如上右圖的樹結(jié)構(gòu)。 對于數(shù)組a的前兩位3和2,很正常地構(gòu)建,到了第個數(shù)“1”時,發(fā)現(xiàn)此時根結(jié)點“3”的平衡因子變成了2,此時整棵樹都成了最小不平衡子樹,需要進行調(diào)整,如下圖圖1(結(jié)點左上角數(shù)字為平衡因子BF值)。因為BF為正,因此將整個樹進行右旋(順時針),此時結(jié)點2成了根結(jié)點,3成了2的右孩子,這樣三個結(jié)點的BF值均為0,非常的平衡,如下圖圖2所示。

然后再增加結(jié)點4,平衡因子沒有改變,如上圖圖3。增加結(jié)點5時,結(jié)點3的BF值為-2,說明要旋轉(zhuǎn)了。由于BF是負值,對這棵最小平衡子樹進行左旋(逆時針旋轉(zhuǎn)),如下圖圖4,此時整個樹又達到了平衡。

繼續(xù)增加結(jié)點6時,發(fā)現(xiàn)根結(jié)點2的BF值變成了-2,如下圖圖6所示。所以對根結(jié)點進行了左旋,注意此時本來結(jié)點3是結(jié)點3的左孩子,由于旋轉(zhuǎn)后需要滿足二叉排序樹特性,因此它成了結(jié)點2的右孩子,如圖7所示。

增加結(jié)點7,同樣的左旋轉(zhuǎn),使得整棵樹達到平衡,如下圖8和9所示。

當增加結(jié)點10時,結(jié)構(gòu)無變化,如圖10所示。再增加結(jié)點9,此時結(jié)點7的BF變成了-2,理論上只需要旋轉(zhuǎn)最小不平衡樹7、9、10即可,但是,如果左旋轉(zhuǎn)后,結(jié)點9變成了10的右孩子,這是不符合二叉排序樹的特性的,此時不能簡單的左旋。如圖11所示。

仔細觀察圖11,發(fā)現(xiàn)根本原因在于結(jié)點7的BF是-2,而結(jié)點10的BF是1,也就是說,它們兩個一正一負,符號并不統(tǒng)一,而前面的幾次旋轉(zhuǎn),無論左還是右旋,最小不平衡子樹的根結(jié)點與它的子結(jié)點符號都是相同的。這就是不能直接旋轉(zhuǎn)的關(guān)鍵。 不統(tǒng)一,不統(tǒng)一就把它們先轉(zhuǎn)到符號統(tǒng)一再說,于是先對結(jié)點9和結(jié)點10進行右旋,使得結(jié)點10成了9的右子樹,結(jié)點9的BF為-1,此時就與結(jié)點7的BF值符號統(tǒng)一了,如圖12所示。

這樣再以結(jié)點7為最小不平衡子樹進行左旋,得到如下圖13。接著,插入8,情況與剛才類似,結(jié)點6的BF是-2,而它的右孩子9的BF是1,如圖14,因此首先以9為根結(jié)點,進行右旋,得到圖15,此時結(jié)點6和結(jié)點7的符號都是負,再以6為根結(jié)點左旋,最終得到最后的平衡二叉樹,如圖16所示。

通過這個例子,可以發(fā)現(xiàn),當最小不平衡樹根結(jié)點的平衡因子BF是大于1時,就右旋,小于-1時就左旋,如上例中的結(jié)點1、5、6、7的插入等。插入結(jié)點后,最小不平衡子樹的BF與它的子樹的BF符號相反時,就需要對結(jié)點先進行一次旋轉(zhuǎn)以使得符號相同后,再反向旋轉(zhuǎn)一次才能夠完成平衡操作,如上例中結(jié)點9、8的插入時。

總結(jié)

以上是生活随笔為你收集整理的计算机考研8,计算机考研每日一练:第八天的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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