【C++】二叉樹和堆的鏈式結構(上)

本篇博客給大家帶來的是用C++語言來實現堆鏈式結構和二叉樹的實現!

🐟🐟文章專欄:數據結構

🚀🚀若有問題評論區下討論,我會及時回答

??歡迎大家點贊、收藏、分享!

今日思想:你現在的懶惰將來你會買單的!

?上篇文章我們實現了二叉樹的堆的順序結構的實現具體內容請看這兩篇文章:【C++】樹和二叉樹的實現(上)-CSDN博客

【C++】樹和二叉樹的實現(下)-CSDN博客

接下來我們實現二叉樹堆的鏈式結構?!

一、二叉樹堆的鏈式結構的定義

? ? ? ? 順序結構實現堆的底層是數組,那么鏈式結構的底層是鏈表。我們先定義鏈表的結構體。

代碼實例:

//Tree.h
//定義鏈式結構二叉樹
typedef char BTDataType;
typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;

二、二叉樹堆的鏈式結構的實現方法

? ? ? ? 二叉樹堆的鏈式結構的實現方法有:?前序遍歷、中序遍歷、后序遍歷、二叉樹結點個數、二叉樹葉子結點個數、二叉樹第k層結點個數、二叉樹查找值為x的結點、二叉樹的銷毀、層序遍歷、判斷二叉樹是否為完成二叉樹。

注意:這些方法的實現大部分都是遞歸的思想,即使不知道遞歸也沒事下面我會細說。

1、前序遍歷

? ? ? ??前序遍歷的規則:先遍歷根,再遍歷左子樹、最后遍歷右子樹。

遍歷順序:A->B->D->NULL->NULL->NULL->C->E->NULL->NULL->F->N->ULL->NULL? ? ?

注:大家可以根據遍歷順序來理解前序遍歷的規則。

代碼實例:

//Tree.h
//前序遍歷
void preOrder(BTNode* root);
//Tree.c
//前序遍歷-根左右
void preOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%c ", root->data);preOrder(root->left);preOrder(root->right);
}

?短短的幾行代碼就完成了前序遍歷,讓我們看看它是怎么實現的,如圖:

? ? ? ? ? 其他的代碼實現跟上圖的注釋一樣就不多寫了,包括后面實現的中序遍歷、后序遍歷等。

注:這張圖不太清楚大家可以下載,然后在電腦自帶的畫圖上放大就行。

?2、中序遍歷

? ? ? ? 中序遍歷的規則:先遍歷左子樹,再遍歷根結點、最后是右子樹。

遍歷順序:NULL->D->NULL->B->NULL->A->NULL->E->NULL->C->NULL->F->NULL?

代碼實例:

//Tree.h
//中序遍歷
void InOrder(BTNode* root);
//Tree.c
//中序遍歷——左根右
void InOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}postOrder(root->left);printf("%c ", root->data);postOrder(root->right);
}

3、后序遍歷

? ? ? ? 后序遍歷的規則:先遍歷左子樹,再遍歷右子樹、最后遍歷根結點。

遍歷順序:NULL->NULL->D->NULL->B->NULL->NULL->E->NULL->NULL->F->C->A?

代碼實例:

//Tree.h
//后序遍歷
void postOrder(BTNode* root);
//Tree.c
//后序遍歷——左右根
void postOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}postOrder(root->left);postOrder(root->right);printf("%c ", root->data);
}

4、二叉樹結點個數

? ? ? ? 二叉樹結點個數=根結點+左子樹的結點個數+右子樹結點個數

注:只有一個根結點。

代碼實例:

//Tree.h
//二叉樹結點個數
int BinaryTreesize(BTNode* root);
//Tree.c
//二叉樹結點個數
int BinaryTreesize(BTNode* root)
{if (root == NULL){return 0;}return 1 + BinaryTreesize(root->left) + BinaryTreesize(root->right);
}

?由于時間的原因后面的實現方法放到下篇文章!!

完!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72854.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Devops之AWS:如何安裝AWS CLI

AWS 命令行界面(AWS CLI)是一種開源工具,讓我們能夠使用命令行 Shell 中的命令與 AWS 服務進行交互。 安裝步驟: 下載并運行AWS CLI的MSI安裝程序: 點擊如下的鏈接,即可下載MSI安裝程序: htt…

PH2D數據集: 用人類演示數據提升人形機器人操作能力,助力跨實體學習

2025-03-18, 由加州大學圣地亞哥分校, 卡內基梅隆大學, 華盛頓大學, 麻省理工學院等機構聯合收集了PH2D數據集。該數據集包含26824個任務導向的人類演示,采用消費者級VR設備收集,提供了準確的3D手部關鍵點姿態和語言注釋。數據集覆蓋了多種操作任務、不同…

python 數據可視化matplotib庫安裝與使用

要使用 matplotlib 庫進行數據可視化,首先你需要確保已經安裝了該庫。如果你還沒有安裝,可以通過 Python 的包管理器 pip 來安裝它。在你的命令行工具中運行以下命令來安裝 matplotlib: pip install matplotlib安裝完成后,你就可以…

【MySQL基礎-10】MySQL中的LENGTH()函數:用法詳解與實例分析

在MySQL數據庫中,LENGTH()函數是一個非常常用的字符串函數,用于計算字符串的字節長度。理解并掌握LENGTH()函數的用法,對于處理字符串數據、優化查詢以及進行數據驗證都非常有幫助。本文將詳細介紹LENGTH()函數的用法,并通過實例演…

Matlab 基于專家pid控制的時滯系統

1、內容簡介 Matlab 185-基于專家pid控制的時滯系統 可以交流、咨詢、答疑 2、內容說明 略 在處理時滯系統(Time Delay Systems)時,使用傳統的PID控制可能會面臨挑戰,因為時滯會導致系統的不穩定或性能下降。專家PID控制通過結…

E902基于bash與VCS的仿真環境建立

網上看見很多E902仿真的文章,但用到的編譯器是類似于這種Xuantie-900-gcc-elf-newlib-x86_64-V3.0.1-20241120,而我按照相應的步驟與對應的編譯器,仿真總會報錯。后面將編譯器換成riscv64-elf-x86_64-20210512,反而成功了。現在開…

SpringSecurity配置(自定義認證過濾器)

文末有本篇文章的項目源碼文件可供下載學習 在這個案例中,我們已經實現了自定義登錄URI的操作,登錄成功之后,我們再次訪問后端中的API的時候要在請求頭中攜帶token,此時的token是jwt字符串,我們需要將該jwt字符串進行解析,查看解析后的User對象是否處于登錄狀態.登錄狀態下,將…

《UNIX網絡編程卷1:套接字聯網API》第1章 簡介

《UNIX網絡編程卷1:套接字聯網API》第1章 簡介 1.1 網絡編程的核心價值與挑戰 網絡編程是實現跨設備通信的技術基礎,其核心目標是通過協議棧實現數據的可靠傳輸與高效交換。在嵌入式系統、云計算、物聯網等領域,網絡編程能力直接決定了系統的…

D-Wave專用量子計算機登頂Science 率先展示在真實場景中的量子優勢(內附下載)

內容來源:量子前哨(ID:Qforepost) 文丨浪味仙 排版丨浪味仙 行業動向:4200字丨16分鐘閱讀 摘要:加拿大專用量子計算機公司 D-Wave 在 Science 期刊發表了論文,題為《Beyond-Classical Compu…

在Ubuntu上安裝MEAN Stack的4個步驟

在Ubuntu上安裝MEAN Stack的4個步驟為:1.安裝MEAN;2.安裝MongoDB;3.安裝NodeJS,Git和NPM;4.安裝剩余的依賴項。 什么是MEAN Stack? 平均堆棧一直在很大程度上升高為基于穩健的基于JavaScript的開發堆棧。…

jmeter將返回的數據寫入csv文件

舉例說明,我需要接口返回體中的exampleid與todoid的數據信息(使用邊界提取器先將其提取),并將其寫入csv文件進行保存 使用后置處理器BeanShell 腳本實例如下 import java.io.*;// 設置要寫入的文件路徑 String filePath "…

Linux下Redis哨兵集群模式搭建(1主2從+3哨兵)

Linux下Redis哨兵集群模式搭建(1主2從3哨兵) 一、Redis哨兵模式搭建 1.安裝包下載 鏈接: https://pan.baidu.com/s/1_n2rCMi5MHX-mVkkyMo4LA 提取碼: gbra 2.新建redis目錄 mkdir -p /app/redis3.解壓到/app/redis目錄下 tar -zxvf redis-6.2.16.ta…

Debian 系統命令集合 |Debian 和 CentOS常見命令的異同

Debian 系統命令集合 Debian 是一個非常流行且穩定的 Linux 發行版,廣泛用于服務器、桌面和工作站環境。 Debian 和 CentOS常見命令 使用方式的對比 注: 部分人(比如我)先學的centos,其實centos和debian 就記住幾十個有區別命…

20250319在榮品的PRO-RK3566開發板的buildroot系統下使用集成的QT應用調試串口UART3

stty -F /dev/ttyS3 115200 -echo cat /dev/ttyS3 & echo serialdata > /dev/ttyS3 20250319在榮品的PRO-RK3566開發板的buildroot系統下使用集成的QT應用調試串口UART3 2025/3/19 14:17 緣起:在榮品的PRO-RK3566開發板的buildroot系統下,在命令…

深入理解 C# 反射 的使用

總目錄 前言 反射是.NET框架中一個強大的特性,允許程序在運行時檢查和操作類型信息。通過反射,開發者可以動態地創建對象、調用方法、訪問屬性等,為程序提供了極大的靈活性。本文將詳細講解C#反射的使用方法及其應用場景。 一、什么是反射&a…

YOLO+OpenCV強強聯手:高精度跌倒檢測技術實戰解析

目錄 關于摔倒檢測 摔倒檢測核心邏輯 摔倒檢測:聯合多種邏輯判斷 原理詳細解釋 1. 導入必要的庫 2. 定義函數和關鍵點連接關系 3. 篩選有效關鍵點并計算邊界框 4. 計算人體上下半身中心點和角度 5. 繪制關鍵點和連接線 6. 繪制角度標注和檢測跌倒 7. 返回處理后的圖…

AI入門7:python三種API方式調用本地Ollama+DeepSeek

回顧 書接上篇:各種方式搭建了本地知識庫: AI入門:AI模型管家婆ollama的安裝和使用-CSDN博客 AI入門2:本地AI部署,用ollama部署deepseek(私有化部署)-CSDN博客 AI入門3:給本地d…

內網安全-橫向移動Kerberos 攻擊SPN 掃描WinRMWinRSRDP

1.WinRM&WinRS 條件: 雙方開啟winrm winrs服務 2008版本以上默認開啟,win 7默認關閉 檢測使用cs內置端口掃描5985開放情況 進行連接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.內網-spn shell setspn -T …

LoRA中黑塞矩陣、Fisher信息矩陣是什么

LoRA中黑塞矩陣、Fisher信息矩陣是什么 1. 三者的核心概念 黑塞矩陣(Hessian) 二階導數矩陣,用于優化問題中判斷函數的凸性(如牛頓法),或計算參數更新方向(如擬牛頓法)。 Fisher信息矩陣(Fisher Information Matrix, FIM) 統計學中衡量參數估計的不確定性,反映數據…

高級java每日一道面試題-2025年3月04日-微服務篇[Eureka篇]-Eureka是什么?

如果有遺漏,評論區告訴我進行補充 面試官: Eureka是什么? 我回答: 在Java高級面試中,關于Eureka的討論通常會涵蓋其基本概念、組件與架構、工作原理、高級特性以及與其他服務發現工具的比較等多個方面。以下是結合提供的內容對Eureka進行的詳細解析和…