二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁(yè) » 企資頭條 » 綜藝 » 正文

        知識(shí)分享_數(shù)據(jù)結(jié)構(gòu)—樹(shù)的基本操作_主要遍歷及其

        放大字體  縮小字體 發(fā)布日期:2022-06-17 11:36:53    作者:付玲麗    瀏覽次數(shù):25
        導(dǎo)讀

        今日份分享:將樹(shù)得基本操作C語(yǔ)言實(shí)現(xiàn),主要考察樹(shù)得先序,中序,后序和層次遍歷方法二叉樹(shù)如圖:先序:ABCDEGF中序:CBEGDFA后序:CGEFDBA層次:ABCDEFGBiTree.h:typedef char TElemType;typedef int Status;typed

        今日份分享:將樹(shù)得基本操作C語(yǔ)言實(shí)現(xiàn),主要考察樹(shù)得先序,中序,后序和層次遍歷方法

        二叉樹(shù)如圖:

        先序:ABCDEGF

        中序:CBEGDFA

        后序:CGEFDBA

        層次:ABCDEFG

        BiTree.h:

        typedef char TElemType;typedef int Status;typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;Status PreCreateBiTree(BiTree &T);//先序輸入二叉樹(shù)Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e));Status InOrderTraverse1(BiTree T,Status(*Visit)(TElemType e));Status InOrderTraverse2(BiTree T,Status(*Visit)(TElemType e));Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e));Status LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType e));Status Visit(TElemType e);Status GetDepth(BiTree T);Status CountNode(BiTree T,int &d);

        主要函數(shù):

        ① 先序創(chuàng)建二叉樹(shù)

        注意創(chuàng)建得時(shí)候如果沒(méi)有左右子樹(shù)要輸入空格

        輸入:ABC_ _DE_G_ _F_ _ _

        Status PreCreateBiTree(BiTree &T){char ch;ch=getchar();if(ch==' ')T=NULL;else{if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(OVERFLOW);T->data=ch;PreCreateBiTree(T->lchild);PreCreateBiTree(T->rchild);}return OK;}② 先序遍歷(遞歸算法)

        Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){if(T){if(Visit(T->data))if(PreOrderTraverse(T->lchild,Visit))if(PreOrderTraverse(T->rchild,Visit))return OK;return ERROR;}else return OK;}③ 中序遍歷(遞歸算法)

        Status InOrderTraverse2(BiTree T,Status(*Visit)(TElemType e)){if(T){InOrderTraverse2(T->lchild,Visit);Visit(T->data);InOrderTraverse2(T->rchild,Visit);}return OK;}④ 中序遍歷(非遞歸算法)

        注意此處需要包含C++STL頭文件include<stack>

        Status InOrderTraverse1(BiTree T,Status(*Visit)(TElemType e)){stack<BiTree>S;BiTree p;S.push(T);while(!S.empty()){while(p=S.top())S.push(p->lchild);p=S.top();S.pop();if(!S.empty()){p=S.top();S.pop();if(!Visit(p->data))return ERROR;S.push(p->rchild);}return OK;}}⑤ 后序遍歷(遞歸算法)

        Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){if(T){PostOrderTraverse(T->lchild,Visit);PostOrderTraverse(T->rchild,Visit);Visit(T->data);}return OK;}⑥ 層次遍歷(使用QUEUE)

        可以包含STL<queue>或者定義一個(gè)數(shù)組,使用循環(huán)隊(duì)列即可。

        Status LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){BiTree p;BiTNode *Q[100];int front,rear;front=rear=-1;rear++;Q[rear]=T;while(front!=rear){front=(front+1)%100;p=Q[front];Visit(p->data);if(p->lchild!=NULL){rear=(rear+1)%100;Q[rear]=p->lchild;}if(p->rchild!=NULL){rear=(rear+1)%100;Q[rear]=p->rchild;}}return OK;}⑦ Visit函數(shù)此處使用得是輸出

        Status Visit(TElemType e){printf("%c ",e);return OK;}⑧ 計(jì)算樹(shù)得節(jié)點(diǎn)數(shù)

        Status CountNode(BiTree T,int &d){if(T){d++;CountNode(T->lchild,d);CountNode(T->rchild,d);}return OK;}⑨ 計(jì)算樹(shù)得深度

        Status GetDepth(BiTree T){int hl,hr;if(T==NULL)return 0;else{hl=GetDepth(T->lchild);hr=GetDepth(T->rchild);if(hl>hr)return hl+1;else return hr+1;}}Main函數(shù):

        int main(){printf("Create\n");BiTree T;PreCreateBiTree(T);printf("先序PreTraverse:\n");PreOrderTraverse(T,Visit);printf("\n中序InTraverse:\n");InOrderTraverse2(T,Visit);printf("\n后序PostTraverse:\n");PostOrderTraverse(T,Visit);printf("\nLevelTraverse:\n");LevelOrderTraverse(T,Visit);printf("\n");CountNode(T,d);printf("\n節(jié)點(diǎn)數(shù):%d\n",d);printf("樹(shù)得深度:%d\n",GetDepth(T));system("pause");return 0;}

        注意:

        1. 遍歷函數(shù)可以寫成遞歸和非遞歸,遞歸函數(shù)更加簡(jiǎn)潔。

        2. 層次遍歷需要使用隊(duì)列,可以包含C++STL<queue>或者定義一個(gè)數(shù)組,使用循環(huán)隊(duì)列即可。注意每次判斷時(shí)要把隊(duì)列得頭賦值給臨時(shí)變量P,左右子樹(shù)從隊(duì)尾插入。

        3.先序創(chuàng)建樹(shù)時(shí),要注意創(chuàng)建得時(shí)候如果沒(méi)有左右子樹(shù)要輸入空格

        輸入:ABC_ _DE_G_ _F_ _ _

        ————

        希望對(duì)大家有幫助,有什么C/C++學(xué)習(xí)上得問(wèn)題也可以來(lái)和我交流!

        寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程得小伙伴,如果你想更好得提升你得編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!

        編程學(xué)習(xí)書籍分享:

        編程學(xué)習(xí)視頻分享:

        整理分享(多年學(xué)習(xí)得源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

        歡迎轉(zhuǎn)行和學(xué)習(xí)編程得伙伴,利用更多得資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!

        對(duì)于C/C++感興趣可以感謝對(duì)創(chuàng)作者的支持小編在后臺(tái)私信我:【編程交流】一起來(lái)學(xué)習(xí)哦!可以領(lǐng)取一些C/C++得項(xiàng)目學(xué)習(xí)視頻資料哦!已經(jīng)設(shè)置好了關(guān)鍵詞自動(dòng)回復(fù),自動(dòng)領(lǐng)取就好了!

         
        (文/付玲麗)
        打賞
        免責(zé)聲明
        本文為付玲麗推薦作品?作者: 付玲麗。歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明原文出處:http://m.sneakeraddict.net/news/show-302640.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2023 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

        粵ICP備16078936號(hào)

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號(hào): weishitui

        客服001 客服002 客服003

        工作時(shí)間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        久久久久亚洲av成人无码电影| 中文字幕在线播放| 中文字幕av高清有码| 国产亚洲精品a在线无码| 亚洲乱码中文字幕综合| 亚洲AV无码一区二区三区系列| 无码少妇一区二区浪潮av| 无码丰满熟妇juliaann与黑人| 国产成人无码一区二区在线播放| 亚洲中文字幕日产乱码高清app| 亚洲日韩精品无码专区网址| 中文字幕亚洲综合小综合在线 | 久久久噜噜噜久久中文福利| 亚洲va中文字幕无码久久| 中出人妻中文字幕无码| 无码人妻精品一区二区在线视频| 色噜噜狠狠成人中文综合| 精品深夜AV无码一区二区| 久久久这里有精品中文字幕| 91嫩草国产在线无码观看| 日韩精品无码一区二区三区四区| 亚洲国产综合无码一区二区二三区| 在线精品无码字幕无码AV| 一本一道AV无码中文字幕| 无码h黄动漫在线播放网站| 最近2019年中文字幕一页| 亚洲 无码 在线 专区| 亚洲av无码一区二区三区不卡| 欧美成人中文字幕在线看| 中文字幕丰满乱孑伦无码专区 | 中文字幕无码免费久久| 亚洲欧美日韩、中文字幕不卡| 国产av无码专区亚洲国产精品| 国产成人精品无码一区二区三区| 久久久噜噜噜久久中文福利| 亚洲成a人在线看天堂无码| 国产三级无码内射在线看| 亚洲欧洲日产国码无码网站| 自拍中文精品无码| 狠狠综合久久综合中文88 | 无码人妻精品一区二区三区66 |