最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)據(jù)結(jié)構(gòu)之滿二叉樹、完全二叉樹的節(jié)點(diǎn)數(shù)計(jì)算詳解

 更新時(shí)間:2026年01月07日 08:45:50   作者:iuu_star  
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之滿二叉樹、完全二叉樹節(jié)點(diǎn)數(shù)計(jì)算的相關(guān)資料,通過代碼示例詳細(xì)展示了如何計(jì)算這兩種二叉樹的節(jié)點(diǎn)數(shù)量,包括總節(jié)點(diǎn)數(shù)、葉子數(shù)、度為1和度為2的節(jié)點(diǎn)數(shù),需要的朋友可以參考下

一、基本概念

1.1 滿二叉樹

定義:高度為 h 的二叉樹,如果它有最大的節(jié)點(diǎn)數(shù)(2?-1個(gè)),則稱為滿二叉樹。

特征

  • 每一層都達(dá)到最大節(jié)點(diǎn)數(shù)

  • 所有葉子都在最后一層

  • 每個(gè)非葉子節(jié)點(diǎn)都有兩個(gè)子節(jié)點(diǎn)

  • 沒有度為1的節(jié)點(diǎn)(要么0個(gè)子,要么2個(gè)子)

1.2 完全二叉樹

定義:高度為 h 的二叉樹,除第 h 層外,其他各層都達(dá)到最大節(jié)點(diǎn)數(shù),且第 h 層的節(jié)點(diǎn)都連續(xù)集中在最左邊

特征

  • 葉子節(jié)點(diǎn)只在最后兩層

  • 最后一層的葉子都靠左排列

  • 度為1的節(jié)點(diǎn)最多只有1個(gè)

  • 適合用數(shù)組存儲(chǔ)(沒有空洞)

1.3 兩種二叉樹對(duì)比

特性滿二叉樹完全二叉樹
度1節(jié)點(diǎn)總是0個(gè)0個(gè)或1個(gè)
葉子位置全在最后一層最后兩層
節(jié)點(diǎn)公式N=2?-1無簡單公式
葉子公式L=2??¹L=⌈N/2⌉
存儲(chǔ)效率最高(無浪費(fèi))高(數(shù)組存儲(chǔ)無空洞)
常見應(yīng)用理論分析、完美平衡堆排序、優(yōu)先級(jí)隊(duì)列

二、代碼詳解

2.1 滿二叉樹計(jì)算

  • 先檢查邊界:高度必須>0,否則直接返回

  • 套用公式計(jì)算

  • 按順序輸出:先總節(jié)點(diǎn),再葉子,然后度2,最后度1(總是0)

void fullBinaryTree(int height) {
    if (height <= 0) return;  // 第1步:參數(shù)檢查
    
    // 第2步:核心計(jì)算
    int total_nodes = pow(2, height) - 1;      // 公式1:總節(jié)點(diǎn)數(shù) = 2^h - 1
    int leaf_nodes = pow(2, height - 1);       // 公式2:葉子數(shù) = 2^(h-1)
    int degree2_nodes = leaf_nodes - 1;        // 公式3:度2節(jié)點(diǎn) = 葉子數(shù) - 1
    
    // 第3步:輸出結(jié)果
    printf("\n高度為 %d 的滿二叉樹:\n", height);
    printf("總節(jié)點(diǎn)數(shù): %d\n", total_nodes);
    printf("葉子節(jié)點(diǎn)數(shù): %d\n", leaf_nodes);
    printf("度2節(jié)點(diǎn): %d\n", degree2_nodes);
    printf("度1節(jié)點(diǎn): 0\n");  // 第4步:滿二叉樹特性(無度1節(jié)點(diǎn))
}

2.2 完全二叉樹計(jì)算

  • 邊界檢查:節(jié)點(diǎn)數(shù)必須>0

  • 依次計(jì)算:高度 → 葉子數(shù) → 度1節(jié)點(diǎn) → 度2節(jié)點(diǎn)(用減法)

  • 簡潔輸出:直接顯示所有結(jié)果

void completeBinaryTree(int n) {
    if (n <= 0) return;  // 第1步:參數(shù)檢查
    
    // 第2步:計(jì)算三個(gè)關(guān)鍵值
    int h = (int)(log2(n)) + 1;          // 公式1:高度 = ?log?n? + 1
    int leaves = (n + 1) / 2;            // 公式2:葉子數(shù) = ?n/2?
    int degree1 = (n % 2 == 0) ? 1 : 0;  // 公式3:度1節(jié)點(diǎn)(偶數(shù)1,奇數(shù)0)
    int degree2 = n - leaves - degree1;  // 公式4:度2節(jié)點(diǎn) = 總數(shù) - 葉子 - 度1
    
    // 第3步:輸出結(jié)果
    printf("\n%d個(gè)節(jié)點(diǎn)的完全二叉樹:\n", n);
    printf("高度: %d\n", h);
    printf("葉子數(shù): %d\n", leaves);
    printf("度1節(jié)點(diǎn): %d\n", degree1);
    printf("度2節(jié)點(diǎn): %d\n", degree2);
}

2.3 主函數(shù)main

int main() {
    // 1. 演示滿二叉樹
    printf("== 滿二叉樹示例 ==");
    fullBinaryTree(3);  // 高度為3的滿二叉樹
    
    // 2. 演示完全二叉樹
    printf("\n== 完全二叉樹示例 ==");
    completeBinaryTree(9);  // 9個(gè)節(jié)點(diǎn)的完全二叉樹
    
    return 0;
}

三、總結(jié)

這段二叉樹節(jié)點(diǎn)關(guān)系計(jì)算代碼體現(xiàn)了清晰的設(shè)計(jì)思路和實(shí)現(xiàn)邏輯。代碼采用模塊化設(shè)計(jì),將滿二叉樹和完全二叉樹的計(jì)算分別封裝為獨(dú)立函數(shù),每個(gè)函數(shù)功能單一、接口明確。

實(shí)現(xiàn)上直接應(yīng)用數(shù)學(xué)公式:滿二叉樹部分基于高度h推導(dǎo)所有節(jié)點(diǎn)數(shù),完全二叉樹部分基于節(jié)點(diǎn)總數(shù)n計(jì)算各項(xiàng)數(shù)值。關(guān)鍵算法包括高度計(jì)算中的對(duì)數(shù)運(yùn)算和類型轉(zhuǎn)換,葉子數(shù)計(jì)算中的整數(shù)除法技巧,以及度1節(jié)點(diǎn)數(shù)的奇偶判斷邏輯。

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

相關(guān)文章

  • C++14中binary literals的使用詳解

    C++14中binary literals的使用詳解

    這篇文章主要介紹了C++14中binary literals的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • C++ map的簡單使用實(shí)現(xiàn)

    C++ map的簡單使用實(shí)現(xiàn)

    map是STL的一個(gè)關(guān)聯(lián)容器,它以<key,value>一對(duì)一的形式存儲(chǔ),且map的內(nèi)部自建一個(gè)紅黑樹,使得其可以自動(dòng)排序,本文就介紹一下C++ map的簡單使用,感興趣的可以了解一下
    2021-05-05
  • C++實(shí)現(xiàn)簡單班級(jí)成績管理系統(tǒng)

    C++實(shí)現(xiàn)簡單班級(jí)成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單班級(jí)成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++中vector類的一些簡單實(shí)現(xiàn)

    C++中vector類的一些簡單實(shí)現(xiàn)

    C++中的std::vector是一個(gè)動(dòng)態(tài)數(shù)組(也被稱為可變大小數(shù)組)的容器類,它是C++標(biāo)準(zhǔn)庫提供的其中一種容器類,提供了方便的操作和管理動(dòng)態(tài)數(shù)組的功能,本文就給大家介紹了C++中vector類的簡單實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-08-08
  • 利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息

    利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息

    在開發(fā)時(shí),常常會(huì)需要用到計(jì)算機(jī)的相關(guān)信息。利用這些信息,我們可以開發(fā)一些輔助模塊。本文將利用Qt實(shí)現(xiàn)獲取計(jì)算機(jī)的硬件信息,感興趣的可以嘗試一下
    2022-12-12
  • 使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進(jìn)行縮放圖片大小(最新推薦)

    使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進(jìn)行縮放圖片大小(最新推薦)

    這篇文章主要介紹了使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進(jìn)行縮放圖片大小,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • C語言中的隱式函數(shù)聲明

    C語言中的隱式函數(shù)聲明

    在c語言里面開來還是要學(xué)習(xí)c++的編程習(xí)慣,使用函數(shù)之前一定要聲明。不然,即使編譯能通過,運(yùn)行時(shí)也可能會(huì)出一些莫名其妙的問題。
    2016-01-01
  • 最新評(píng)論

    大竹县| 东丰县| 武夷山市| 武鸣县| 武夷山市| 大英县| 潞城市| 敖汉旗| 偃师市| 铅山县| 永善县| 临江市| 安庆市| 金乡县| 文昌市| 新绛县| 云林县| 洛扎县| 彰化市| 牟定县| 赤壁市| 荣成市| 长岭县| 宁强县| 监利县| 太和县| 江北区| 永康市| 都昌县| 马尔康县| 昆山市| 扶风县| 寻乌县| 西安市| 东台市| 吉木乃县| 垣曲县| 尤溪县| 阳西县| 宁远县| 西林县|