溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言中堆和樹的區(qū)別

發(fā)布時間:2021-08-27 17:40:34 來源:億速云 閱讀:222 作者:chen 欄目:云計算

本篇內(nèi)容介紹了“C語言中堆和樹的區(qū)別”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

以小根堆為例,堆的特點是雙親結(jié)點的關(guān)鍵字必然小于等于孩子結(jié)點的關(guān)鍵字,而兩個孩子結(jié)點的關(guān)鍵字沒有次序規(guī)定
而二叉排序樹中,每個雙親結(jié)點的關(guān)鍵字均大于左子樹結(jié)點的關(guān)鍵字,均小于右子樹j結(jié)點的關(guān)鍵字,也就是說,每個雙親結(jié)點的左右孩子的關(guān)鍵字有次序關(guān)系
這樣,當對兩種樹執(zhí)行中序遍歷后,二叉排序樹會得到一個有序的序列,而堆不一定。


堆是一種特殊的樹,它每個結(jié)點都有一個值,堆的特點是根結(jié)點的值最?。ɑ蜃畲螅腋Y(jié)點的兩個子樹也是一個堆。就類似一堆東西一樣,按照由大到?。ɑ蛴尚〉酱螅岸选逼饋?。


堆是一種邏輯結(jié)構(gòu),樹是一種存儲結(jié)構(gòu),兩者是不同層面的東西,就像“中國人"和“成年人”,本來就不矛盾。
heap一詞反映了一種上小下大的金字塔狀特征。


heap和tree結(jié)合,生了個孩子叫treap
中文名叫樹堆。
首先它每個節(jié)點有2個值value和weight
其中只看weight的話,滿足heap二叉堆的特性(父親比兒子都小/大),只看value的話,滿足排序二叉樹特性(以左兒子為根的子樹元素都比父親小,右兒子為根的子樹都比父親大)
value是要維護的值,weight是隨機生成的值。由于隨機生成的堆使整棵treap變得平衡(嚴格證明請谷歌百度~),所以treap是一種比較短小精悍的平衡樹的實現(xiàn)~

廢話結(jié)束,回歸題目(莫名押韻)
只要無環(huán)無向聯(lián)通圖都叫樹,具體就是n個點n-1條無向邊連接且任意兩點聯(lián)通的一種拓撲結(jié)構(gòu)
如果我們選定一個節(jié)點作為根,那么這棵樹就是有根樹,遍歷一遍就可以確定所有的父親-兒子的關(guān)系了。。。
如果一棵有根樹的每一個結(jié)點至多有兩個兒子,那么這棵樹稱為二叉樹

如果一棵二叉樹的每一個節(jié)點都帶著一個值,且父親的值總是比兒子的值要大,我們稱這棵樹為大頂二叉堆,如果是父親比兒子都要小,那就是小頂二叉堆,統(tǒng)稱為二叉堆。(其實一般都把二叉兩個字省略掉,畢竟通常說的堆都是二叉堆,然而堆不止二叉堆)。這一個良好的性質(zhì)注定了堆可以用來當作優(yōu)先隊列使用。
優(yōu)先隊列支持以下操作
1.放一個元素進去
2.總是能取出一個最大的元素出來(大,小的規(guī)矩可以通過一個比較函數(shù)來定義)

顯然堆就是可以這么做。

當然啦,之前說過堆不止二叉堆,還有更復(fù)雜的二項堆,斐波那契堆,配對堆等等。

總結(jié),堆是一種特殊的樹。


堆的定義:在1到n/2的元素中,有k(i)<=k(2i),k(i)<=k(2i+1)
* 或k(i)>=k(2i),k(i)>=k(2i+1)
* 簡單來說:就是假如將此序列看成一棵完全二叉樹,要使這個無序列表
* 變成堆,則小于等于n/2(最后一個非終端節(jié)點就是n/2)的某個節(jié)點i的左右子節(jié)點均大于此節(jié)點
* 即堆的定義k(i)<=k(2i),k(i)<=k(2i+1)

“C語言中堆和樹的區(qū)別”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI