亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹的概念及滿二叉樹與完全二叉樹

 更新時(shí)間:2022年02月24日 16:17:56   作者:檸檬葉子C  
在上一章中我們正式開啟了對數(shù)據(jù)結(jié)構(gòu)中樹的講解,介紹了樹的基礎(chǔ)。本章我們將學(xué)習(xí)二叉樹的概念,介紹滿二叉樹和完全二叉樹的定義,并對二叉樹的基本性質(zhì)進(jìn)行一個(gè)簡單的介紹。本章附帶課后練習(xí)

?? 鏈接:C語言數(shù)據(jù)結(jié)構(gòu)系列之樹的概念結(jié)構(gòu)和常見表示方法

0x00 概念

?? 定義:二叉樹既然叫二叉樹,顧名思義即度最大為2的樹稱為二叉樹。 它的度可以為 1 也可以為 0,但是度最大為 2 。 

?? 一顆二叉樹是節(jié)點(diǎn)的一個(gè)有限集合,該集合:

     ① 由一個(gè)根節(jié)點(diǎn)加上兩顆被稱為左子樹和右子樹的二叉樹組成     

     ② 或者為空

?? 觀察上圖我們可以得出如下結(jié)論:

     ① 二叉樹不存在度大于 2 的節(jié)點(diǎn),換言之二叉樹最多也只能有兩個(gè)孩子。

     ② 二叉樹的子樹有左右之分,分別為左孩子和右孩子。次序不可顛倒,因此二叉樹是有序樹。

?? 注意:對于任意的二叉樹都是由以下幾種情況復(fù)合而成的:

0x01 滿二叉樹

?? 定義:一個(gè)二叉樹,如果每一層的節(jié)點(diǎn)數(shù)都達(dá)到了最大值(均為2),則這個(gè)二叉樹就可以被稱作為 "滿二叉樹" 。

?? 換言之,如果一個(gè)二叉樹的層數(shù)為h,且節(jié)點(diǎn)總數(shù)是2^h - 1 ,則他就是一個(gè)滿二叉樹。

?? 計(jì)算公式:

 ① 已知層數(shù)求總數(shù):N = 2^h-1

 ② 已知總數(shù)求層數(shù): h = log_2(N+1)

? 十億個(gè)節(jié)點(diǎn),滿二叉樹是多少層?

??2^3^0 ≈ 10億多

0x02 完全二叉樹

?? 定義:對于深度為 K的,有n個(gè)結(jié)點(diǎn)的二叉樹,當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為K的滿二叉樹中編號從 1 至n的結(jié)點(diǎn)一一對應(yīng)時(shí)稱之為完全二叉樹。

?? 前 h - 1層是滿的,最后一層不滿,但是最后一層從左到右是連續(xù)的。

完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹是由滿二叉樹而引出來的。所以,滿二叉樹是一種特殊的完全二叉樹(每一層節(jié)點(diǎn)均為2)。

?? 常識:

① 完全二叉樹中,度為 1 的最多只有 1 個(gè)。

② 高度為 h 的完全二叉樹節(jié)點(diǎn)范圍是   [ 2^{h-1} - 1 + 1, 2^{h} - 1 ]

0x03 二叉樹的性質(zhì)

?? 四點(diǎn)規(guī)則:

 ① 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 ,則一顆非空二叉樹的第 i 層上最多有 2^{(i-1)} 個(gè)節(jié)點(diǎn)。

 ② 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 ,則深度為 K 的二叉樹最大節(jié)點(diǎn)數(shù)是 2^h-1 .

 ③ 對任何一顆二叉樹,如果度為 0 其葉子結(jié)點(diǎn)個(gè)數(shù)為 n_0 ,度為 2 的分支節(jié)點(diǎn)個(gè)數(shù)為 n_2 ,則有  n_0 = n_2 + 1 。換言之,度為 0 的永遠(yuǎn)比度為 2 的多一個(gè)葉子結(jié)點(diǎn)。

 ④ 若規(guī)定根節(jié)點(diǎn)的層數(shù)為 1 , 具有 n 個(gè)節(jié)點(diǎn)的滿二叉樹的深度  K = log_2 (n+1)   (log是以2為底,n+1的對數(shù))。

?? 對于有 n 個(gè)節(jié)點(diǎn)的完全二叉樹,如果按照從上至下從左至右的數(shù)組順序?qū)λ泄?jié)點(diǎn)從 0 開始編號,則對于序號為 parent 的節(jié)點(diǎn)有:

(非完全二叉樹,也可以用數(shù)組存放,但會浪費(fèi)很多空間)

假設(shè) parent 是父節(jié)點(diǎn)在數(shù)組中的下標(biāo),此公式僅適用于完全二叉樹:

① 求左孩子: leftChild = parent * 2 + 1

② 求右孩子:rightChild = parent*2+2

③ 求父親(假設(shè)不關(guān)注是左孩子還是右孩子): parent = \frac{child-1}{2}

④  判斷是否有左孩子:2*parent+1\geq n

⑤  判斷是否由右孩子:2*parent+2 \geq n

 ?? PS:二叉樹不一定要標(biāo)準(zhǔn),比如這個(gè)其實(shí)也是二叉樹:

課后練習(xí):

1. 某二叉樹共有 399 個(gè)結(jié)點(diǎn),其中有 199 個(gè)度為 2 的結(jié)點(diǎn),則該二叉樹中的葉子結(jié)點(diǎn)數(shù)為( )

     A.  不存在這樣的二叉樹

     B.  200

     C.  198

     D.  199

2. 在具有 2n 個(gè)結(jié)點(diǎn)的完全二叉樹中,葉子結(jié)點(diǎn)個(gè)數(shù)為( )

     A.  n

     B.  n+1

     C.  n-1

     D.  n/2

3.  一棵完全二叉樹的節(jié)點(diǎn)數(shù)位為531個(gè),那么這棵樹的高度為( )

     A.  11

     B.  10

     C.  8

     D.  12

5.  一個(gè)具有767個(gè)節(jié)點(diǎn)的完全二叉樹,其葉子節(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

? 勘誤: 無

?? 聲明: 由于作者水平有限,本文有錯誤和不準(zhǔn)確之處在所難免,本人也很想知道這些錯誤,懇望讀者批評指正!

本篇完。

到此這篇關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹的概念及滿二叉樹與完全二叉樹的文章就介紹到這了,更多相關(guān)C語言 二叉樹的概念內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言 字符串指針詳解及示例代碼

    C語言 字符串指針詳解及示例代碼

    本文主要介紹C語言 字符串指針,這里整理了詳細(xì)資料,并附示例代碼及實(shí)現(xiàn)結(jié)果,有興趣的小伙伴可以參考下
    2016-08-08
  • C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒

    C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒

    這篇文章主要介紹了C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向,整個(gè)Cartographer源碼閱讀是很枯燥的, 但絕對是可以學(xué)到東西的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-03-03
  • C語言學(xué)習(xí)之指針的使用詳解

    C語言學(xué)習(xí)之指針的使用詳解

    想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文為大家總結(jié)了C語言中指針的相關(guān)知識點(diǎn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-10-10
  • 常用Hash算法(C語言的簡單實(shí)現(xiàn))

    常用Hash算法(C語言的簡單實(shí)現(xiàn))

    下面小編就為大家?guī)硪黄S肏ash算法(C語言的簡單實(shí)現(xiàn))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • Qt實(shí)現(xiàn)TCP客戶端和服務(wù)器通訊程序

    Qt實(shí)現(xiàn)TCP客戶端和服務(wù)器通訊程序

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)TCP客戶端和服務(wù)器通訊程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • opencv實(shí)現(xiàn)三幀差法解析

    opencv實(shí)現(xiàn)三幀差法解析

    這篇文章主要介紹了opencv實(shí)現(xiàn)三幀差法的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)

    C語言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言模擬實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言的變量類型及內(nèi)存大小詳解

    C語言的變量類型及內(nèi)存大小詳解

    這篇文章主要介紹了CC和C++變量類型及內(nèi)存大小,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • C語言中的BYTE和char深入解析

    C語言中的BYTE和char深入解析

    在C語言中,字符(character)這個(gè)術(shù)語具有兩個(gè)層次上的含義:書寫源程序的字符和程序處理的字符
    2013-10-10
  • OpenCV實(shí)現(xiàn)直線檢測并消除

    OpenCV實(shí)現(xiàn)直線檢測并消除

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)直線檢測并消除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論