c語(yǔ)言_構(gòu)建一個(gè)靜態(tài)二叉樹(shù)實(shí)現(xiàn)方法
第一、樹(shù)的構(gòu)建
定義樹(shù)結(jié)構(gòu)
struct BTNode { char data; struct BTNode* pLChild; struct BTNode* pRChild; };
靜態(tài)方式創(chuàng)建一個(gè)簡(jiǎn)單的二叉樹(shù)
struct BTNode* create_list() { struct BTNode* pA = (struct BTNode*)malloc(sizeof(BTNode)); struct BTNode* pB = (struct BTNode*)malloc(sizeof(BTNode)); struct BTNode* pC = (struct BTNode*)malloc(sizeof(BTNode)); struct BTNode* pD = (struct BTNode*)malloc(sizeof(BTNode)); struct BTNode* pE = (struct BTNode*)malloc(sizeof(BTNode)); pA->data = 'A'; pB->data = 'B'; pC->data = 'C'; pD->data = 'D'; pE->data = 'E'; pA->pLChild = pB; pA->pRChild = pC; pB->pLChild = pB->pRChild = NULL; pC->pLChild = pD; pC->pRChild = NULL; pD->pLChild = NULL; pD->pRChild = pE; pE->pLChild = pE->pRChild = NULL; return pA; }
第二、樹(shù)的三種遍歷
1. 先序遍歷
//先序輸出 void PreTravense(struct BTNode* pHead) { if (NULL!= pHead) { printf("%c", pHead->data); if (NULL!= pHead->pLChild) { PreTravense(pHead->pLChild); } if (NULL != pHead->pRChild) { PreTravense(pHead->pRChild); } } }
2. 中序遍歷
//中序輸出 void InTravense(struct BTNode* pHead) { if (NULL != pHead) { if (NULL != pHead->pLChild) { PreTravense(pHead->pLChild); } printf("%c", pHead->data); if (NULL != pHead->pRChild) { PreTravense(pHead->pRChild); } } }
3.后續(xù)遍歷
//后序輸出 void PostTravense(struct BTNode* pHead) { if (NULL != pHead) { if (NULL != pHead->pLChild) { PreTravense(pHead->pLChild); } if (NULL != pHead->pRChild) { PreTravense(pHead->pRChild); } printf("%c", pHead->data); } }
第三、最終運(yùn)行測(cè)試
int main() { printf("創(chuàng)建序列\(zhòng)n"); struct BTNode* pHead = create_list(); printf("先序輸出\n"); PreTravense(pHead); printf("中序輸出\n"); InTravense(pHead); printf("后序輸出\n"); PostTravense(pHead); return 0; }
以上這篇c語(yǔ)言_構(gòu)建一個(gè)靜態(tài)二叉樹(shù)實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- C語(yǔ)言判定一棵二叉樹(shù)是否為二叉搜索樹(shù)的方法分析
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(shù)(AVL樹(shù))實(shí)現(xiàn)方法示例
- 使用C語(yǔ)言實(shí)現(xiàn)最小生成樹(shù)求解的簡(jiǎn)單方法
- 使用C語(yǔ)言求二叉樹(shù)結(jié)點(diǎn)的最低公共祖先的方法
- C語(yǔ)言實(shí)現(xiàn)找出二叉樹(shù)中某個(gè)值的所有路徑的方法
- C語(yǔ)言實(shí)現(xiàn)計(jì)算樹(shù)的深度的方法
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列之樹(shù)的概念結(jié)構(gòu)和常見(jiàn)表示方法
相關(guān)文章
Windows安裝Qt6.4.2及簡(jiǎn)單驗(yàn)證
本文主要介紹了Windows安裝Qt6.4.2及簡(jiǎn)單驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Qt數(shù)據(jù)庫(kù)應(yīng)用之超級(jí)自定義委托
Qt中需要用到自定義委托的情形很多,比如提供下拉框選擇,進(jìn)度條展示下載進(jìn)度啥的,默認(rèn)的單元格是沒(méi)有這些效果的,需要自己?jiǎn)为?dú)用委托的形式來(lái)展示。本文將為大家介紹Qt中如何進(jìn)行超級(jí)自定義委托,需要的可以參考一下2022-03-03C++實(shí)現(xiàn)簡(jiǎn)單職工管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++職工管理系統(tǒng)實(shí)訓(xùn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04C++ OpenCV實(shí)戰(zhàn)之圖像透視矯正
這篇文章主要介紹了通過(guò)C++ OpenCV實(shí)現(xiàn)圖像的透視矯正,文中的示例代碼講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的可以了解一下2022-01-01C語(yǔ)言中的狀態(tài)機(jī)設(shè)計(jì)深入講解
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言狀態(tài)機(jī)設(shè)計(jì)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11VS2022實(shí)現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程
本文主要介紹了VS2022實(shí)現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02詳解windows下C/C++的內(nèi)存泄露檢測(cè)
C/C++由于其沒(méi)有垃圾回收機(jī)制,所以內(nèi)存的釋放一直以來(lái)都依靠于程序員的手工釋放,因此極其容易出現(xiàn)內(nèi)存泄露的問(wèn)題,而在比較大的程序之中,查找內(nèi)存泄露是一件比較困難的事情,所以我們需要一些簡(jiǎn)便的方法來(lái)檢測(cè)內(nèi)存泄露,避免內(nèi)存泄露導(dǎo)致設(shè)備崩潰2021-06-06C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12C++實(shí)現(xiàn)LeetCode(78.子集合)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(78.子集合),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07