多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 編程判斷一個樹是完全二叉樹(使用層次遍歷實現)

編程判斷一個樹是完全二叉樹(使用層次遍歷實現)

來源:程序員人生   發布時間:2014-09-29 16:43:59 閱讀次數:4131次

完全二叉樹:一棵具有N個節點的二叉樹的結構與滿二叉樹的前N個節點的結構相同



如何判斷一個樹是完全二叉樹

可以使用層序遍歷,只需2個步驟

第一步:如果遍歷到一個節點只有右子樹沒有左子樹,則不是完全二叉樹

第二部:如果遍歷到一個節點只有左子樹,那么后面遍歷到的節點必須是葉子節點,否則也不是完全二叉樹

排除以上兩種情況,則樹是完全二叉樹

核心代碼:

//層序遍歷 int LayerOrder(BiTreeNode *head) { bool flag=0; LQueue Q; Initiate_Queue(&Q); BiTreeNode *p; if(head!=NULL) AppendQueue(&Q,head); while(QueueNotEmpty(&Q)) { if(flag) { if(p->LChild!=NULL || p->RChild!=NULL) return 0; } p=QueueDelete(&Q); if(p->LChild!=NULL) AppendQueue(&Q,p->LChild); if(p->RChild!=NULL) AppendQueue(&Q,p->RChild); if((p->LChild==NULL) && (p->RChild!=NULL)) return 0; //如果左子樹為空,右子樹存在,則不是完全2叉樹 //如果左子樹存在,右子樹為空,設置flag為1,進行進一步判斷,判斷后面遍歷的節點是否為葉子節點 if(p->LChild!=NULL &&p->RChild==NULL) flag=1; //如果左子樹,右子樹都為空,設置flag為1,進行進一步判斷,判斷后面遍歷的節點是否為葉子節點 if(p->LChild==NULL && p->RChild==NULL) flag=1; } return 1; }



完整代碼如下:

#include<iostream> using namespace std; typedef struct biTreeNode { char data; struct biTreeNode *LChild; struct biTreeNode *RChild; }BiTreeNode; void Initiate_Tree(BiTreeNode **head) { (*head)=(BiTreeNode *)malloc(sizeof(BiTreeNode)); (*head)->LChild=NULL; (*head)->RChild=NULL; } BiTreeNode *InsertLChild(BiTreeNode *head,char x) { if(head==NULL) return NULL; else { BiTreeNode *p1,*p2; p1=head->LChild; p2=(BiTreeNode*)malloc(sizeof(BiTreeNode)); p2->data=x; p2->RChild=NULL; head->LChild=p2; p2->LChild=p1; return p2; } } BiTreeNode* InsertRChild(BiTreeNode *head,char x) { if(head==NULL) return NULL; { BiTreeNode *p1,*p2; p1=head->RChild; p2=(BiTreeNode*)malloc(sizeof(BiTreeNode)); p2->data=x; p2->LChild=NULL; head->RChild=p2; p2->RChild=p1; return p2; } } void DLR(BiTreeNode *head) { if(head==NULL) return; else { cout<<head->data<<" "; DLR(head->LChild); DLR(head->RChild); } } //================================================== typedef struct lNode { BiTreeNode *data; struct lNode *next; }LNode; typedef struct lQueue { LNode *front; LNode *rear; }LQueue; void Initiate_Queue(LQueue *Q) { Q->front=NULL; Q->rear=NULL; } void AppendQueue(LQueue *Q,BiTreeNode *head) { LNode *p1; p1=(LNode *)malloc(sizeof(LNode)); p1->next=NULL; p1->data=head; if(Q->front==NULL) { Q->front=Q->rear=p1; } else { Q->rear->next=p1; Q->rear=p1; } } BiTreeNode * QueueDelete(LQueue *Q) { if(Q->front==NULL) return NULL; else { BiTreeNode *p; p=Q->front->data; Q->front=Q->front->next; return p; } } int QueueNotEmpty(LQueue *Q) { if(Q->front==NULL) return 0; else return 1; } //層序遍歷 int LayerOrder(BiTreeNode *head) { bool flag=0; LQueue Q; Initiate_Queue(&Q); BiTreeNode *p; if(head!=NULL) AppendQueue(&Q,head); while(QueueNotEmpty(&Q)) { if(flag) { if(p->LChild!=NULL || p->RChild!=NULL) return 0; } p=QueueDelete(&Q); if(p->LChild!=NULL) AppendQueue(&Q,p->LChild); if(p->RChild!=NULL) AppendQueue(&Q,p->RChild); if((p->LChild==NULL) && (p->RChild!=NULL)) return 0; //如果左子樹為空,右子樹存在,則不是完全2叉樹 //如果左子樹存在,右子樹為空,設置flag為1,進行進一步判斷,判斷后面遍歷的節點是否為葉子節點 if(p->LChild!=NULL &&p->RChild==NULL) flag=1; //如果左子樹,右子樹都為空,設置flag為1,進行進一步判斷,判斷后面遍歷的節點是否為葉子節點 if(p->LChild==NULL && p->RChild==NULL) flag=1; } return 1; } void main() { BiTreeNode *head,*p,*p1; int flag; Initiate_Tree(&head); head->data='j'; p=InsertLChild(head,'k'); p=InsertLChild(p,'a'); InsertRChild(head,'b'); cout<<"前序遍歷為:"<<endl; DLR(head); cout<<endl; flag=LayerOrder(head); if(flag) cout<<"是二叉樹"<<endl; else cout<<"不是二叉樹"<<endl; system("pause"); }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美高清另类videosbestsex | 欧美xxxx免费 | 久久精品免视看国产明星 | 亚洲国产人久久久成人精品网站 | 综合 欧美 亚洲日本 | 欧美日本一二三区 | 久久久免费的精品 | 欧美国产一区二区二区 | 波多野结衣一区二区 | 一级欧美一级日韩毛片99 | 国产高清一区 | 欧美精品一区二区三区在线 | 久久久精品国产 | 俺也操| 亚洲精品欧美综合 | 美国一级毛片片aa成人 | 波多野结衣国产一区二区三区 | 性欧美一区 | 亚洲激情专区 | 秋霞午夜视频在线观看 | 男人边吃奶边玩下面舒服 | 最近中文字幕免费在线看 | 成人在线精品视频 | 亚洲日本一区二区三区在线不卡 | 伊人快播 | 成人久久久久久 | 欧美一级久久久久久久大片动画 | 国产欧美日韩一区二区三区视频 | 国产11一12周岁女毛片 | 香蕉高清免费永久在线视频 | 一级特黄色大片 | 日本xxxxx久色视频在线观看 | 亚洲国产成a人v在线观看 | 最新欧洲大片免费在线看 | 一级做a爰性色毛片免费 | 日本护士xxxxx在线 | 一级做a爰性色毛片免费 | 黄色录像大片毛片aa | 久久99国产精一区二区三区! | 西欧free性video巴西 | 丁香综合五月 |