C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹(shù)的概念及滿二叉樹(shù)與完全二叉樹(shù)
?? 鏈接:C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列之樹(shù)的概念結(jié)構(gòu)和常見(jiàn)表示方法
0x00 概念
?? 定義:二叉樹(shù)既然叫二叉樹(shù),顧名思義即度最大為2的樹(shù)稱為二叉樹(shù)。 它的度可以為 1 也可以為 0,但是度最大為 2 。
?? 一顆二叉樹(shù)是節(jié)點(diǎn)的一個(gè)有限集合,該集合:
① 由一個(gè)根節(jié)點(diǎn)加上兩顆被稱為左子樹(shù)和右子樹(shù)的二叉樹(shù)組成
② 或者為空
?? 觀察上圖我們可以得出如下結(jié)論:
① 二叉樹(shù)不存在度大于 2 的節(jié)點(diǎn),換言之二叉樹(shù)最多也只能有兩個(gè)孩子。
② 二叉樹(shù)的子樹(shù)有左右之分,分別為左孩子和右孩子。次序不可顛倒,因此二叉樹(shù)是有序樹(shù)。
?? 注意:對(duì)于任意的二叉樹(shù)都是由以下幾種情況復(fù)合而成的:
0x01 滿二叉樹(shù)
?? 定義:一個(gè)二叉樹(shù),如果每一層的節(jié)點(diǎn)數(shù)都達(dá)到了最大值(均為2),則這個(gè)二叉樹(shù)就可以被稱作為 "滿二叉樹(shù)" 。
?? 換言之,如果一個(gè)二叉樹(shù)的層數(shù)為,且節(jié)點(diǎn)總數(shù)是
,則他就是一個(gè)滿二叉樹(shù)。
?? 計(jì)算公式:
① 已知層數(shù)求總數(shù):
② 已知總數(shù)求層數(shù):
? 十億個(gè)節(jié)點(diǎn),滿二叉樹(shù)是多少層?
?? ≈ 10億多
0x02 完全二叉樹(shù)
?? 定義:對(duì)于深度為 的,有
個(gè)結(jié)點(diǎn)的二叉樹(shù),當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為
的滿二叉樹(shù)中編號(hào)從 1 至
的結(jié)點(diǎn)一一對(duì)應(yīng)時(shí)稱之為完全二叉樹(shù)。
?? 前 層是滿的,最后一層不滿,但是最后一層從左到右是連續(xù)的。
完全二叉樹(shù)是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹(shù)是由滿二叉樹(shù)而引出來(lái)的。所以,滿二叉樹(shù)是一種特殊的完全二叉樹(shù)(每一層節(jié)點(diǎn)均為2)。
?? 常識(shí):
① 完全二叉樹(shù)中,度為 1 的最多只有 1 個(gè)。
② 高度為 的完全二叉樹(shù)節(jié)點(diǎn)范圍是
0x03 二叉樹(shù)的性質(zhì)
?? 四點(diǎn)規(guī)則:
① 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 ,則一顆非空二叉樹(shù)的第 層上最多有
個(gè)節(jié)點(diǎn)。
② 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 ,則深度為 的二叉樹(shù)最大節(jié)點(diǎn)數(shù)是
.
③ 對(duì)任何一顆二叉樹(shù),如果度為 0 其葉子結(jié)點(diǎn)個(gè)數(shù)為 ,度為 2 的分支節(jié)點(diǎn)個(gè)數(shù)為
,則有
。換言之,度為 0 的永遠(yuǎn)比度為 2 的多一個(gè)葉子結(jié)點(diǎn)。
④ 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 , 具有 個(gè)節(jié)點(diǎn)的滿二叉樹(shù)的深度
(log是以2為底,n+1的對(duì)數(shù))。
?? 對(duì)于有 個(gè)節(jié)點(diǎn)的完全二叉樹(shù),如果按照從上至下從左至右的數(shù)組順序?qū)λ泄?jié)點(diǎn)從 0 開(kāi)始編號(hào),則對(duì)于序號(hào)為
的節(jié)點(diǎn)有:
(非完全二叉樹(shù),也可以用數(shù)組存放,但會(huì)浪費(fèi)很多空間)
假設(shè) 是父節(jié)點(diǎn)在數(shù)組中的下標(biāo),此公式僅適用于完全二叉樹(shù):
① 求左孩子:
② 求右孩子:
③ 求父親(假設(shè)不關(guān)注是左孩子還是右孩子):
④ 判斷是否有左孩子:
⑤ 判斷是否由右孩子:
?? PS:二叉樹(shù)不一定要標(biāo)準(zhǔn),比如這個(gè)其實(shí)也是二叉樹(shù):
課后練習(xí):
1. 某二叉樹(shù)共有 399 個(gè)結(jié)點(diǎn),其中有 199 個(gè)度為 2 的結(jié)點(diǎn),則該二叉樹(shù)中的葉子結(jié)點(diǎn)數(shù)為( )
A. 不存在這樣的二叉樹(shù)
B. 200
C. 198
D. 199
2. 在具有 2n 個(gè)結(jié)點(diǎn)的完全二叉樹(shù)中,葉子結(jié)點(diǎn)個(gè)數(shù)為( )
A. n
B. n+1
C. n-1
D. n/2
3. 一棵完全二叉樹(shù)的節(jié)點(diǎn)數(shù)位為531個(gè),那么這棵樹(shù)的高度為( )
A. 11
B. 10
C. 8
D. 12
5. 一個(gè)具有767個(gè)節(jié)點(diǎn)的完全二叉樹(shù),其葉子節(jié)點(diǎn)個(gè)數(shù)為()
A. 383
B. 384
C. 385
D. 386
參考資料:
Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .
百度百科[EB/OL]. []. https://baike.baidu.com/.
?? 筆者:王亦優(yōu)
?? 更新: 2021.11.24
? 勘誤: 無(wú)
?? 聲明: 由于作者水平有限,本文有錯(cuò)誤和不準(zhǔn)確之處在所難免,本人也很想知道這些錯(cuò)誤,懇望讀者批評(píng)指正!
本篇完。
到此這篇關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹(shù)的概念及滿二叉樹(shù)與完全二叉樹(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言 二叉樹(shù)的概念內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉樹(shù)詳解
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹(shù)的遍歷
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之二叉鏈表創(chuàng)建二叉樹(shù)
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)先序、中序、后序及層次四種遍歷
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之線索二叉樹(shù)及其遍歷
- C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)平衡二叉樹(shù)實(shí)例詳解
- C語(yǔ)言?超詳細(xì)總結(jié)講解二叉樹(shù)的概念與使用
相關(guān)文章
C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒
這篇文章主要介紹了C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向,整個(gè)Cartographer源碼閱讀是很枯燥的, 但絕對(duì)是可以學(xué)到東西的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-03-03常用Hash算法(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))
下面小編就為大家?guī)?lái)一篇常用Hash算法(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09Qt實(shí)現(xiàn)TCP客戶端和服務(wù)器通訊程序
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)TCP客戶端和服務(wù)器通訊程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08C語(yǔ)言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07OpenCV實(shí)現(xiàn)直線檢測(cè)并消除
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)直線檢測(cè)并消除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06