<strike id="ca4is"><em id="ca4is"></em></strike>
  • <sup id="ca4is"></sup>
    • <s id="ca4is"><em id="ca4is"></em></s>
      <option id="ca4is"><cite id="ca4is"></cite></option>
    • 二維碼
      企資網

      掃一掃關注

      當前位置: 首頁 » 企業資訊 » 熱點 » 正文

      知識分享_數據結構—樹的基本操作_主要遍歷及其

      放大字體  縮小字體 發布日期:2022-06-17 11:36:53    作者:付玲麗    瀏覽次數:54
      導讀

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

      今日份分享:將樹得基本操作C語言實現,主要考察樹得先序,中序,后序和層次遍歷方法

      二叉樹如圖:

      先序: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);//先序輸入二叉樹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);

      主要函數:

      ① 先序創建二叉樹

      注意創建得時候如果沒有左右子樹要輸入空格

      輸入: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>或者定義一個數組,使用循環隊列即可。

      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函數此處使用得是輸出

      Status Visit(TElemType e){printf("%c ",e);return OK;}⑧ 計算樹得節點數

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

      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函數:

      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節點數:%d\n",d);printf("樹得深度:%d\n",GetDepth(T));system("pause");return 0;}

      注意:

      1. 遍歷函數可以寫成遞歸和非遞歸,遞歸函數更加簡潔。

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

      3.先序創建樹時,要注意創建得時候如果沒有左右子樹要輸入空格

      輸入:ABC_ _DE_G_ _F_ _ _

      ————

      希望對大家有幫助,有什么C/C++學習上得問題也可以來和我交流!

      寫在最后:對于準備學習C/C++編程得小伙伴,如果你想更好得提升你得編程核心能力(內功)不妨從現在開始!

      編程學習書籍分享:

      編程學習視頻分享:

      整理分享(多年學習得源碼、項目實戰視頻、項目筆記,基礎入門教程)

      歡迎轉行和學習編程得伙伴,利用更多得資料學習成長比自己琢磨更快哦!

      對于C/C++感興趣可以小編在后臺私信我:【編程交流】一起來學習哦!可以領取一些C/C++得項目學習視頻資料哦!已經設置好了關鍵詞自動回復,自動領取就好了!

       
      (文/付玲麗)
      免責聲明
      本文僅代表作發布者:付玲麗個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
       

      Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

      粵ICP備16078936號

      微信

      關注
      微信

      微信二維碼

      WAP二維碼

      客服

      聯系
      客服

      聯系客服:

      在線QQ: 303377504

      客服電話: 020-82301567

      E_mail郵箱: weilaitui@qq.com

      微信公眾號: weishitui

      客服001 客服002 客服003

      工作時間:

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

      反饋

      用戶
      反饋

      午夜久久久久久网站,99久久www免费,欧美日本日韩aⅴ在线视频,东京干手机福利视频
        <strike id="ca4is"><em id="ca4is"></em></strike>
      • <sup id="ca4is"></sup>
        • <s id="ca4is"><em id="ca4is"></em></s>
          <option id="ca4is"><cite id="ca4is"></cite></option>
        • 主站蜘蛛池模板: 67194在线午夜亚洲| 俺来也俺去啦久久综合网| 久久天天躁狠狠躁夜夜不卡| 黑人巨茎大战白人美女| 欧美三级在线观看视频| 最近最新中文字幕6页| 国产色无码精品视频国产| 亚洲精品乱码久久久久久| 97人人添人澡人人爽超碰| 毛利兰的胸被狂揉扒开吃奶| 国产高清在线不卡| 亚洲春色另类小说| 18无码粉嫩小泬无套在线观看| 欧美人禽杂交狂配动态图| 国产特级淫片免费看| 久久精品人妻中文系列| 超清高清欧美videos| 手机在线看片你懂的| 午夜天堂一区人妻| www.99精品| 欧美视频中文字幕| 国产福利vr专区精品| 久久夜色精品国产网站| 色婷婷天天综合在线| 帅哥我要补个胎小说| 国产三级日本三级韩国三级在线观看| 亚洲成在人线在线播放无码| 亚洲丝袜制服欧美另类| 日韩专区亚洲精品欧美专区| 国产精品v欧美精品∨日韩| 久青草久青草视频在线观看| 菠萝蜜视频网在线www| 成人av免费电影| 亚洲精品蜜桃久久久久久| 香蕉伊思人在线精品| 日韩欧美在线综合网高清| 国产1区2区3区4区| 久久99国产亚洲精品观看| 精品久久久久久久久久中文字幕| 在线观看91精品国产不卡免费| 午夜精品一区二区三区在线观看 |