日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树(C语言)

發布時間:2025/10/17 编程问答 7 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<pre name="code" class="cpp">#include <stdio.h> #include <malloc.h>typedef char elemType;typedef struct BTree {elemType data;struct BTree* lTree;struct BTree* rTree;struct BTree* next;//打印二叉樹時建立隊列需要 }Tree;typedef struct QList {Tree* first;//隊頭Tree* rear;//隊尾int queneSize;//隊大小 }Quene;//隊列初始化 生成空隊列 Quene* createQuene() {Quene* Q;Q=(Quene*)malloc(sizeof(Quene));Q->first=Q->rear=NULL;Q->queneSize=0;return Q; }//入隊 void enterQuene(Quene* Q,Tree* T) {Tree* p;p=(Tree*)malloc(sizeof(Tree));p->data=T->data;p->lTree=T->lTree;p->rTree=T->rTree;p->next=NULL;Q->queneSize++;if(Q->first==NULL)//空隊列Q->first=Q->rear=p;else{Q->rear->next=p;Q->rear=p;}}//出隊 Tree* deleteQuene(Quene* Q,elemType *elem) {Tree* p;p=(Tree*)malloc(sizeof(Tree));*elem=Q->first->data;p=Q->first;Q->first=p->next;Q->queneSize--;if(Q->queneSize==0)//重要Q->rear=NULL;return p;//free(p);//p=NULL; }//遍歷隊列 void displayQuene(Quene* Q) {printf("遍歷隊列\r\n");int i=Q->queneSize;Tree* p=(Tree*)malloc(sizeof(Tree));p=Q->first;while(i--){printf("%c\t",p->data);p=p->next;}printf("\r\n"); }//判斷隊列是否為空 bool isEmptyQuene(Quene* Q) {return Q->first==NULL&&Q->rear==NULL&&Q->queneSize==0; }//創建二叉樹 Tree* createTree() {Tree* T;T=(Tree*)malloc(sizeof(Tree));char ch;scanf("%c",&ch);if(ch=='#')return NULL;T->data=ch;T->next=NULL;T->lTree=createTree();T->rTree=createTree();return T; }//判斷是否為空樹 bool isEmptyTree(Tree* T) {return T==NULL; }//先序遍歷二叉樹 void preOrder(Tree* T) {if(T){preOrder(T->lTree);printf("%c\t",T->data);preOrder(T->rTree);} }//中序遍歷二叉樹 void inOrder(Tree* T) {if(T){printf("%c\t",T->data);inOrder(T->lTree);inOrder(T->rTree);} }//后序遍歷二叉樹 void postOrder(Tree* T) {if(T){postOrder(T->lTree);postOrder(T->rTree);printf("%c\t",T->data);} }//打印二叉樹(重點)從上往下打印二叉樹 void printTree_elem(Tree* T) {printf("層次遍歷打印二叉樹\r\n");if(T == NULL)return;Quene* Q;Q=createQuene();printf("%c\t",T->data);if(T->lTree)enterQuene(Q,T->lTree);if(T->rTree)enterQuene(Q,T->rTree);while(!isEmptyQuene(Q)){elemType temp;Tree* p;p=deleteQuene(Q,&temp);printf("%c\t",temp);if(p->lTree)enterQuene(Q,p->lTree);if(p->rTree)enterQuene(Q,p->rTree);}printf("\r\n"); }//打印二叉樹(重點)圖形 隊列 bool printTree(Tree* T,int nLayer) {if(T==NULL){for(int i=0;i<nLayer;i++){printf(" ");}printf("%c\n",'#');return false;}printTree(T->rTree,nLayer+3);for(int i=0;i<nLayer;i++){printf(" ");}printf("%c\n",T->data);printTree(T->lTree,nLayer+3);return true; }//清空二叉樹 void clearTree(Tree* T) {if(T ==NULL)return;if(T->lTree!=NULL)clearTree(T->lTree);if(T->rTree!=NULL)clearTree(T->rTree);free(T);//T=NULL;return; } //銷毀二叉樹 void destroyTree(Tree* T) {if(T)clearTree(T); }//返回樹的深度 int deptTree(Tree* T) {int ldept,rdept;ldept=0;rdept=0;if(T->lTree||T->rTree){if(T->lTree)ldept=deptTree(T->lTree);if(T->rTree)rdept=deptTree(T->rTree);}return 1+(ldept>rdept?ldept:rdept);//1 根節點 }//返回結點數 int cntTree(Tree* T) {int cnt=0;if(T)cnt++;if(T->lTree)cnt+=cntTree(T->lTree);if(T->rTree)cnt+=cntTree(T->rTree);return cnt; }//返回子樹結點深度 void deptNode(Tree* T,Tree* p,int *dept,int *flag) {if(T->data==p->data)//找到該子樹{*flag=1;return;}if(!*flag)(*dept)++;if(!*flag)if(T->lTree){deptNode(T->lTree,p,&(*dept),&(*flag));if(*flag)return;}if(!*flag)if(T->rTree){deptNode(T->rTree,p,&(*dept),&(*flag));if(*flag)return;}if(!*flag){(*dept)=(*dept)-1;return;} }int main() {Tree* T;printf("創建二叉樹\r\n");T=createTree();printf("先序遍歷二叉樹\r\n");preOrder(T);printf("\r\n");printf("中序遍歷二叉樹\r\n");inOrder(T);printf("\r\n");printf("后序遍歷二叉樹\r\n");postOrder(T);printf("\r\n");printf("二叉樹的深度:%d\r\n",deptTree(T));printf("二叉樹的結點數:%d\r\n",cntTree(T));/*//測試:返回子樹結點的深度Tree* p;p=(Tree*)malloc(sizeof(Tree));p->lTree=NULL;p->rTree=NULL;int dept=1;//子樹深度int flag=0;//搜索標志 找到時置1 // p->data='a'; // p->data='b'; // p->data='c'; // p->data='d'; // p->data='e'; // p->data='f';p->data='g';deptNode(T,p,&dept,&flag);printf("子樹結點%c的深度為:%d\r\n",p->data,dept);*/printTree_elem(T);printf("打印豎狀二叉樹\r\n");printTree(T,0); }

總結

以上是生活随笔為你收集整理的二叉树(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.日本在线| 午夜福利电影 | 成人免费xxxxx在线观看 | 中文字幕永久在线播放 | 在线观看黄色片网站 | 午夜精品久久久久久久第一页按摩 | 最新极品jizzhd欧美 | 亚洲天堂一区 | 欧美呦交| 亚洲精品欧美日韩 | 打白嫩屁屁网站视频短裙 | 日韩专区一区二区三区 | 婷婷视频网| 欧美射| 香蕉在线观看视频 | 欧美成人黄色小视频 | 国产精品入口日韩视频大尺度 | 精品人妻一区二区三区麻豆91 | 青青草原综合久久大伊人精品 | 午夜国产在线观看 | 在线高清观看免费观看 | 欧美性生交xxxxx久久久 | www.黄色片网站 | 伊人97| 国产成人精品一区二区三区四区 | 久草免费资源站 | 日本aa在线观看 | 毛片毛片毛片毛片毛片 | 97超视频在线观看 | 日日撸夜夜操 | 久久国产精品影院 | 亚洲第三区 | 成人午夜视频在线免费观看 | 久久亚洲av无码西西人体 | 国产一区二区三区视频免费在线观看 | 久草国产在线观看 | 美女国产毛片a区内射 | 亚洲の无码国产の无码步美 | 91久久在线 | 日韩二区视频 | 18pao国产成视频永久免费 | 丰满双乳秘书被老板狂揉捏 | 影音先锋国产 | 五月天婷婷激情 | 婷婷午夜精品久久久久久性色av | 自拍偷拍亚洲天堂 | 国产在线观看一区二区三区 | 亚洲一区二区三区四区在线播放 | 亚洲jizzjizz日本少妇 | a级黄毛片 | 韩国午夜影院 | 久久久中文网 | 国内精品久久久久久久久久久 | 老司机午夜性大片 | 三级网站免费 | 国产亚洲精品久久久久婷婷瑜伽 | 老司机综合网 | 成人小视频免费观看 | av电影在线网站 | 亚洲一区二区福利 | 天堂在线观看免费视频 | av在线a| 一区二区网站 | 69久久久久久 | 伊人影院视频 | 日韩精品高清在线观看 | 精品久| 久久黄色片视频 | 神马影院午夜伦理片 | 91一区在线观看 | 欧美freesex黑人又粗又大 | 国产精品亚洲αv天堂无码 伊人性视频 | 特种兵之深入敌后 | 狠狠插视频 | 狠狠久久综合 | 久久久99精品国产一区二区三区 | 手机在线看永久av片免费 | 无码精品在线观看 | 一区二区三区在线免费视频 | 草逼网站| 天天想你在线观看完整版电影免费 | 国产精品久久久久久久久久久久 | 久久久精品中文字幕 | 日产av在线| 婷婷综合社区 | 免费毛片网站在线观看 | 亚欧洲精品在线视频 | 17c一起操 | 日本黄大片在线观看 | 91午夜精品亚洲一区二区三区 | 91视频在线网站 | 欧美综合视频在线观看 | 黄色av成人| 麻豆系列 | a天堂资源| 国产精品99久久久久久www | 国产黄色精品 | 美女赤身免费网站 | 99精品欧美一区二区 |