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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求二叉树节点个数、叶子节点、节点层次与宽度

發(fā)布時間:2025/3/8 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求二叉树节点个数、叶子节点、节点层次与宽度 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

需實(shí)現(xiàn):(1)輸出二叉樹b的節(jié)點(diǎn)個數(shù)

? ? ? ? ? ? ? (2)輸出二叉樹b的葉子節(jié)點(diǎn)個數(shù)

? ? ? ? ? ? ? (3)求二叉樹b中指定節(jié)點(diǎn)值(假設(shè)所有節(jié)點(diǎn)值不同)的節(jié)點(diǎn)的層次。

? ? ? ? ? ? ? (4)利用層次遍歷求二叉樹b的寬度

#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> const int MaxSize=10000; using namespace std; typedef struct node {char data;struct node * lchild;struct node * rchild; }BTNode; typedef struct qnode {BTNode *data;struct qnode *next; }DataNode; typedef struct {int Size;DataNode *front;DataNode *rear; }SqQueue; void InitQueue(SqQueue * &q) {q=(SqQueue *)malloc(sizeof(SqQueue));q->front=q->rear=NULL;q->Size=0; } bool QueueEmpty(SqQueue *q) {return (q->rear==NULL); } void enQueue(SqQueue * &q,BTNode *e) {DataNode *p;p=(DataNode *)malloc(sizeof(DataNode));p->data=e;p->next=NULL;if(q->rear==NULL)q->front=q->rear=p;else{q->rear->next=p;q->rear=p;}q->Size++; } bool deQueue(SqQueue * &q,BTNode * &e) {DataNode * t;if(q->rear==NULL)return false;t=q->front;if(q->front==q->rear)q->front=q->rear=NULL;elseq->front=q->front->next;e=t->data;free(t);q->Size--;return true; } int QueueSize(SqQueue * q) {return q->Size; } void CreatBTree(BTNode * &b,char * str) //建立二叉樹 {BTNode *St[MaxSize],*p;int top=-1,k,j=0;char ch;b=NULL;ch=str[j];while(ch!='\0'){switch(ch){case '(':top++;St[top]=p;k=1;break;case ')':top--;break;case ',':k=2;break;default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)b=p;else{switch(k){case 1:St[top]->lchild=p;break;case 2:St[top]->rchild=p;break;}}}j++;ch=str[j];} } int yznum; char yz[MaxSize]; void YZjiedian(BTNode *b) //找葉子節(jié)點(diǎn)的個數(shù) {if(b!=NULL){if(b->lchild==NULL&&b->rchild==NULL) {yznum++;yz[yznum]=b->data;}YZjiedian(b->lchild);YZjiedian(b->rchild);} } int jdnum; char jd[MaxSize]; void JieDian(BTNode *b) //找節(jié)點(diǎn)的個數(shù) {if(b!=NULL){jdnum++;jd[jdnum]=b->data;JieDian(b->lchild);JieDian(b->rchild);} } void PreOrder(BTNode *b) //先序遍歷 {if(b!=NULL){printf("%c ",b->data);PreOrder(b->lchild);PreOrder(b->rchild);} } void InOrder(BTNode *b) //中序遍歷 {if(b!=NULL){InOrder(b->lchild);printf("%c ",b->data);InOrder(b->rchild);} } void PostOrder(BTNode *b) //后序遍歷 {if(b!=NULL){PostOrder(b->lchild);PostOrder(b->rchild);printf("%c ",b->data);} } int result; void LevelOrder(BTNode *b) //求二叉樹的最大寬度 {BTNode *nape;nape=b;int cnt;BTNode *p;SqQueue *qu;InitQueue(qu);enQueue(qu,b);while(!QueueEmpty(qu)){cnt=QueueSize(qu);result=max(result,cnt);while(cnt--){deQueue(qu,p);if(p->lchild!=NULL)enQueue(qu,p->lchild);if(p->rchild!=NULL)enQueue(qu,p->rchild);}} } int FindJieDian(BTNode *b,char c) //尋找節(jié)點(diǎn)層次 {BTNode *nape;nape=b;int cnt;int level=0;BTNode *p;SqQueue *qu;InitQueue(qu);enQueue(qu,b);while(!QueueEmpty(qu)){cnt=QueueSize(qu);level++;while(cnt--){deQueue(qu,p);if(p->data==c)return level;if(p->lchild!=NULL)enQueue(qu,p->lchild);if(p->rchild!=NULL)enQueue(qu,p->rchild);}}return -1; } int main() {char str[MaxSize]={"A(B(D,E(H(J,K(L,M(,N))),)),C(F,G(,I)))"};printf("此棵二叉樹為:%s\n",str);BTNode *b;CreatBTree(b,str);JieDian(b);printf("此二叉樹的結(jié)點(diǎn)個數(shù)為:%d\n",jdnum);printf("此二叉樹的節(jié)點(diǎn)為:");for(int i=1;i<=jdnum;i++)printf(" %c",jd[i]);printf("\n");printf("先序遍歷輸出節(jié)點(diǎn)為:");PreOrder(b);printf("\n");printf("中序遍歷輸出節(jié)點(diǎn)為:");InOrder(b);printf("\n");printf("后序遍歷輸出節(jié)點(diǎn)為:");PostOrder(b);printf("\n");YZjiedian(b);printf("此二叉樹的葉子結(jié)點(diǎn)個數(shù)為:%d\n",yznum);printf("此二叉樹的葉子節(jié)點(diǎn)為:");for(int i=1;i<=yznum;i++)printf(" %c",yz[i]);printf("\n");LevelOrder(b);printf("此二叉樹的最大寬度為:%d\n",result);char ch;while(printf("請輸入你要查詢的節(jié)點(diǎn):")!=EOF){scanf(" %c",&ch);int nape=FindJieDian(b,ch);if(nape==-1)printf("二叉樹中無此節(jié)點(diǎn)\n");elseprintf("節(jié)點(diǎn)%c在二叉樹中的層數(shù)為:%d\n",ch,nape);}return 0; }

?

實(shí)現(xiàn)圖片:

總結(jié)

以上是生活随笔為你收集整理的求二叉树节点个数、叶子节点、节点层次与宽度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品中文字幕在线 | 日本激情视频 | 亚洲久热| 欧美黑人又粗又大高潮喷水 | 丰满孕妇性春猛交xx大陆 | 特黄一区二区 | 国产精品视频一区二区三 | 福利影院在线 | 五月天久久久 | 欧美肥妇bwbwbwbxx| 国内自拍在线 | 激情五月综合网 | 可以看的av网站 | 男生舔女生的屁股 | 精品视频一二三区 | 色88久久久久高潮综合影院 | 噼里啪啦动漫高清在线观看 | 日韩电影网址 | 黄色一级国产 | 国产一区二区综合 | 性欢交69国产精品 | www.com毛片 | 精品国产乱码久久 | 国产一区日本 | 国产精品久久久久久久久久小说 | 啊v视频在线观看 | 国产精品第二页 | 国产精九九网站漫画 | av网站入口 | 国产激情无码一区二区 | 色屁屁视频 | 东京热无码av一区二区 | 日日插插 | 欧美三区四区 | 亚洲美女视频在线观看 | 黑人操亚洲美女 | 日本人妻换人妻毛片 | 日本黄色免费网站 | 久久精品日韩无码 | 那里可以看毛片 | 色综合色综合色综合 | 老司机深夜福利在线观看 | 精品国产aⅴ一区二区三区东京热 | 国产精品v欧美精品v日韩精品 | 午夜伦伦电影理论片费看 | 国产99久一区二区三区a片 | aa级黄色片 | 日本熟妇乱子伦xxxx | 黄色av网址在线观看 | 91久久久久久久久久 | 色91av| 极品少妇一区 | 小色瓷导航 | 东京热毛片 | 欧美黄色成人 | 亚洲色欧美| 亚洲欧美日韩精品久久 | 中文字幕97 | 亚洲欧美91 | 青青草原国产在线 | 久久国产欧美日韩精品 | 国产精品高潮呻吟 | 在线激情| 精品麻豆视频 | 欧美色xxxx| www超碰在线 | 欧洲视频一区二区 | 国产精品女人精品久久久天天 | 精品在线你懂的 | 69av视频在线观看 | av最新网址 | 国产精品腿扒开做爽爽爽挤奶网站 | 欧美极品jizzhd欧美爆 | 国产黄色免费大片 | 婷婷欧美 | 男人扒女人添高潮视频 | 国产精欧美一区二区三区蓝颜男同 | 夜色一区二区三区 | 日韩aⅴ视频 | 中文字幕自拍偷拍 | 国产欧美一区二区三区另类精品 | 日日夜夜欧美 | 国产成人精品网 | 在线观看亚洲国产 | 久久亚洲影院 | 中文字幕一区二区三区在线不卡 | 亚洲人女屁股眼交6 | 午夜影院在线观看18 | 日韩欧美第一区 | 蜜桃久久久久久久 | 欧美色图1| 久久久久久av无码免费看大片 | 成人午夜视频网站 | 国产精品探花一区二区三区 | 波多野结衣在线视频播放 | 国产色婷婷一区二区三区竹菊影视 | 国产精品福利在线观看 | 毛片资源 | 欧美一级色片 |