![2024年樹和二叉樹實(shí)驗(yàn)報(bào)告_第1頁](http://file4.renrendoc.com/view14/M06/1C/36/wKhkGWaSE3iAWlrFAADzMCKDXyU644.jpg)
![2024年樹和二叉樹實(shí)驗(yàn)報(bào)告_第2頁](http://file4.renrendoc.com/view14/M06/1C/36/wKhkGWaSE3iAWlrFAADzMCKDXyU6442.jpg)
![2024年樹和二叉樹實(shí)驗(yàn)報(bào)告_第3頁](http://file4.renrendoc.com/view14/M06/1C/36/wKhkGWaSE3iAWlrFAADzMCKDXyU6443.jpg)
![2024年樹和二叉樹實(shí)驗(yàn)報(bào)告_第4頁](http://file4.renrendoc.com/view14/M06/1C/36/wKhkGWaSE3iAWlrFAADzMCKDXyU6444.jpg)
![2024年樹和二叉樹實(shí)驗(yàn)報(bào)告_第5頁](http://file4.renrendoc.com/view14/M06/1C/36/wKhkGWaSE3iAWlrFAADzMCKDXyU6445.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
樹和二叉樹試驗(yàn)報(bào)告課程數(shù)據(jù)結(jié)構(gòu)試驗(yàn)名稱樹和二叉樹系別____計(jì)算機(jī)學(xué)院專業(yè)班級__軟件134_____姓名__徐雅欣____學(xué)號_00406134試驗(yàn)日期:年6月7日試驗(yàn)?zāi)繕?biāo):掌握二叉樹,二叉樹排序數(shù)的概念及存儲措施。掌握二叉樹的遍歷算法純熟掌握編寫實(shí)現(xiàn)樹的各種運(yùn)算的算法試驗(yàn)內(nèi)容(-)試驗(yàn)題目一:建立一棵二叉樹并中序遍歷(填空)1.要點(diǎn)分析:中序遍歷的遍歷規(guī)則是(前中后),既先訪問左子樹,在訪問目前節(jié)點(diǎn),最后訪問右子樹。2.程序源代碼:#include<stdio.h>#include<malloc.h>structnode{ chardata; structnode*lchild,*rchild;}bnode;typedefstructnode*blink;blinkadd(blinkbt,charch){ if(bt==NULL) { bt=(blink)malloc(sizeof(bnode)); bt->data=ch; bt->lchild=bt->rchild=NULL; } elseif(ch<bt->data) bt->lchild=add(bt->lchild,ch); else bt->rchild=add(bt->rchild,ch);returnbt;}voidinorder(blinkbt){ if(bt) { inorder(bt->lchild); printf("%2c",bt->data);inorder(bt->rchild); }}main(){ blinkroot=NULL; inti,n; charx; scanf("%d",&n); for(i=0;i<=n;i++) { x=getchar(); root=add(root,x); } inorder(root); printf("\n");}3.試驗(yàn)成果:(二)試驗(yàn)題目2:編寫程序,求二叉樹的節(jié)點(diǎn)數(shù)和葉子樹。1.要點(diǎn)分析:.定理:二叉樹假如有v0個(gè)葉子節(jié)點(diǎn),那么就有v0-1個(gè)度為二的節(jié)點(diǎn)就是v0-1=v2
定理:二叉樹有N個(gè)節(jié)點(diǎn)N=v0+v1+v2即節(jié)點(diǎn)總數(shù)等于度為0,1,2的節(jié)點(diǎn)的和。2.程序源代碼:#include<stdio.h>
#include<malloc.h>
#defineERROR0
#defineOK1
#defineOVERFLOW-2
#defineTRUE1
typedefintStatus;
typedefcharTElemType;typedefstructBiTNode
{TElemTypedata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
intcount=0;
StatusCreateBiTree(BiTree*T)
{
charch;
scanf("%c",&ch);
if(ch=='')(*T)=NULL;
else{
if(!((*T)=(BiTNode*)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
returnOK;
}
StatusCountleaf(BiTreeT)
{if(T)
{if((!T->lchild)&&(!T->rchild))count++;
Countleaf(T->lchild);
Countleaf(T->rchild);
}
returncount;
}
StatusDepth(BiTreeT)
{intdepthval,depthleft=0,depthright=0;
if(!T)depthval=0;
else
{depthleft=Depth(T->lchild);
depthright=Depth(T->rchild);
depthval=1+(depthleft>depthright?depthleft:depthright);
}
returndepthval;
}
StatusPreorder(BiTreeT)
{if(T)
{printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
StatusInOrderTraverse(BiTreeT,Status
(*Visit)(TElemTypee)){
StackS;InitStack(S);p=T;
while(p=!StackEmpty(S)){
if
(p){Push(S,p);p=p->lchild;}
else{Pop(S,p);if(!Visit(p->data))returnERROR;
p=p->rchild;
}
}
returnOK;
}
voidmain()
{BiTreeT;
printf("pleaseinputaTree:");
CreateBiTree(&T);
printf("theTreeis:");
Preorder(T);
printf("\n");
InOrderTraverse(T);
printf("\n");
printf("thenumberofleavesis:");
printf("%d",Countleaf(T));
printf("\n");
printf("theDepthofthetreeis:");
printf("%d",Depth(T));
getch();
}3.試驗(yàn)成果:(三)試驗(yàn)題目3:編寫程序,實(shí)現(xiàn)按層次遍歷二叉樹。1.要點(diǎn)分析:定義:1、滿二叉樹:一棵深度為k且有2的k次方減1個(gè)結(jié)點(diǎn)的二叉樹稱為滿二叉樹2、完全二叉樹:假如有深度為k的,有n個(gè)結(jié)點(diǎn)的二叉樹,當(dāng)且僅當(dāng)其每一個(gè)結(jié)點(diǎn)都與深度為k的滿二叉樹中編號從1至n的結(jié)點(diǎn)一一對應(yīng)時(shí),稱之為完全二叉樹。性質(zhì):1、二叉樹的第i層上至多有2的i-1次方個(gè)結(jié)點(diǎn)(i>=1)。
2、深度為k的二叉樹至多有2的k次方減1個(gè)結(jié)點(diǎn)(k>=1)。
3、對任何一棵二叉樹T,假如其終端結(jié)點(diǎn)數(shù)為n0,度為2的結(jié)點(diǎn)數(shù)為n2,則n0=n2+1。
4、具備n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為以2為底n的對數(shù)取下限加1。
5、假如對一棵有n個(gè)結(jié)點(diǎn)的完全二叉樹的結(jié)點(diǎn)按層序編號,則對任一結(jié)點(diǎn)i(1=<i=<n)有:
(1)假如i=1,則結(jié)點(diǎn)i是二叉樹的根,無雙親;假如i>1,則雙親PARENT(i)是結(jié)點(diǎn)[i/2]
(2)假如2i>n,則結(jié)點(diǎn)i無左孩子(結(jié)點(diǎn)i為葉子結(jié)點(diǎn));否則其左孩子LCHILD(i)是結(jié)點(diǎn)2i
(3)假如2i+1>n,則結(jié)點(diǎn)i無右孩子;否則其右孩子RCHILD(i)是結(jié)點(diǎn)2i+1.存儲結(jié)構(gòu):次序存儲結(jié)構(gòu)(數(shù)組方式),鏈?zhǔn)酱鎯Y(jié)構(gòu)(二叉鏈表)2.程序源代碼:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineMAXSIZE50typedefcharDataType;structnode{ DataTypedata; structnode*lchild; structnode*rchild;}BitNode;typedefstructnode*BiTree;voidCreateBiTree(BiTree*T){ DataTypech; ch=getchar(); if(ch=='#') *T=NULL; else { *T=(BiTree)malloc(sizeof(BitNode)); if(!(*T)) exit(-1); (*T)->data=ch;CreateBiTree(&(*T)->lchild);CreateBiTree(&(*T)->rchild); }}voidLayerOrder(BiTreeT){ BiTreequeue[MAXSIZE]; //BitNode*p; BiTreep; intfront,rear; front=rear=-1; rear++; queue[rear]=T; while(front!=rear) { front=(front+1)%MAXSIZE; p=queue[front]; printf("%2c",p->data); if(p->lchild!=NULL) { rear=(rear+1)%MAXSIZE; queue[rear]=p->lchild; } if(p->rchild!=NULL) { rear=(rear+1)%MAXSIZE; queue[rear]=p->rchild; } } printf("\n");}voidmain(){ BiTreeT=NULL; printf("創(chuàng)建一顆二叉樹<#>表示空:\n"); CreateBiTree(&T); printf("\n"); printf("二叉數(shù)層次遍歷為:\n"); LayerOrder(T);}3.試驗(yàn)成果:(四)試驗(yàn)題目4:編寫程序,對二叉樹進(jìn)行先序遍歷,并打印層號。1.要點(diǎn)分析:從二叉樹的遞歸定義可知,一棵非空的二叉樹由根結(jié)點(diǎn)及左、右子樹這三個(gè)基本部分組成。因此,在任一給定結(jié)點(diǎn)上,能夠按某種次序執(zhí)行三個(gè)操作:(1)訪問結(jié)點(diǎn)自身(N),(2)遍歷該結(jié)點(diǎn)的左子樹(L),(3)遍歷該結(jié)點(diǎn)的右子樹(R)。依照遍歷的標(biāo)準(zhǔn):先左后右,對于先序遍歷,顧名思義就是先訪問根節(jié)點(diǎn),再訪問左子樹,最后訪問右子樹,2.程序源代碼:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineMAXSIZE50typedefcharDataType;structnode{ DataTypedata; structnode*lchild;//指向左孩子結(jié)點(diǎn) structnode*rchild;//指向右孩子結(jié)點(diǎn) intlevel;}BitNode;typedefstructnode*BiTree;voidCreateBiTree(BiTree*T){ DataTypech; ch=getchar(); if(ch=='#') *T=NULL; else { *T=(BiTree)malloc(sizeof(BitNode));//生成根節(jié)點(diǎn) if(!(*T)) exit(-1); (*T)->data=ch;CreateBiTree(&(*T)->lchild);//結(jié)構(gòu)左子樹CreateBiTree(&(*T)->rchild);//結(jié)構(gòu)右子樹 }}voidPreOrder(BiTreeT,intlevel)//先序遍歷的遞歸實(shí)現(xiàn){ if(T) { printf("%2c%2d\n",T->data,level); PreOrder(T->lchild,++level);PreOrder(T->rchild,level); }}voidmain(){ BiTreeT=NULL; intlev=1; printf("創(chuàng)建一顆二叉樹:\n"); CreateBiTree(&T); printf("\n"); printf("二叉數(shù)先序遍歷及各點(diǎn)對應(yīng)的層號為:\n"); getchar(); PreOrder(T,lev);}3.試驗(yàn)成果:(五)試驗(yàn)題目5:編寫程序,實(shí)現(xiàn)二叉樹的先序,中序,后序遍歷,并求深度。1.要點(diǎn)分析:了解先序,中序,后序。2.程序源代碼:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineMAXSIZE50typedefcharDataType;structnode{ DataTypedata; structnode*lchild;//指向左孩子結(jié)點(diǎn) structnode*rchild;//指向右孩子結(jié)點(diǎn)}BitNode;typedefstructnode*BiTree;voidCreateBiTree(BiTree*T){ DataTypech; ch=getchar(); if(ch=='#') *T=NULL; else { *T=(BiTree)malloc(sizeof(BitNode));//生成根節(jié)點(diǎn) if(!(*T)) exit(-1); (*T)->data=ch;CreateBiTree(&(*T)->lchild);//結(jié)構(gòu)左子樹CreateBiTree(&(*T)->rchild);//結(jié)構(gòu)右子樹 }}voidPreOrder(BiTreeT)//先序遍歷的遞歸實(shí)現(xiàn){ if(T) { printf("%2c",T->data); PreOrder(T->lchild);PreOrder(T->rchild); }}voidInOrder(BiTreeT)//中序遍歷的遞歸實(shí)現(xiàn){ if(T) { InOrder(T->lchild); printf("%2c",T->data);InOrder(T->rchild); }}voidPostOrder(BiTreeT)//后序遍歷的遞歸實(shí)現(xiàn){ if(T) { PostOrder(T->lchild);PostOrder(T->rchild); printf("%2c",T->data); }}BiTreeFindNode(BiTreeT,DataTypee)//查找節(jié)點(diǎn){ BiTreep; if(T==NULL) returnNULL; elseif(T->data==e) returnT; else { p=FindNode(T->lchild,e); if(p!=NULL) returnp; else returnFindNode(T->rchild,e); }}intBitTreeDepth(BiTreeT){ intlchildepth,rchildepth; if(T==NULL) return0; else { lchildepth=BitTreeDepth(T->lchild); rchildepth=BitTreeDepth(T->rchild); if(lchildepth>rchildepth) return(lchildepth+1); else return(rchildepth+1); }}voidmain(){ BiTreeT=NULL,root; inth; DataTypee; printf("創(chuàng)建一顆二叉樹<#>表示子樹為空:\n"); CreateBiTree(&T); printf("\n"); printf("二叉數(shù)的先序遍歷為:\n"); PreOrder(T); printf("\n"); printf("二叉數(shù)的中序遍歷為:\n"); InOrder(T); printf("\n"); printf("二叉數(shù)的后序遍歷為:\n"); PostOrder(T); printf("\n"); h=BitTreeDepth(T);printf("這課二叉數(shù)的深度為%d:",h); getchar(); printf("\n\n輸入要查找節(jié)點(diǎn):"); //scanf("%c",&e); e=getchar();root=FindNode(T,e);h=BitTreeDepth(root); printf("\n以%c結(jié)點(diǎn)為根的子樹深度為%d:",e,h);printf("\n");}3.試驗(yàn)成果:(六)試驗(yàn)題目6:編寫遞歸算法,求二叉樹中以元素值為x的結(jié)點(diǎn)為根的子樹的深度。1.要點(diǎn)分析:遞歸過程一般通過函數(shù)或子過程來實(shí)現(xiàn)。遞歸措施:在函數(shù)或子過程的內(nèi)部,直接或者間接地調(diào)用自己的算法。遞歸算法所體現(xiàn)的“重復(fù)”一般有三個(gè)要求:一是每次調(diào)用在規(guī)模上都有所縮小(一般是減半);二是相鄰兩次重復(fù)之間有緊密的聯(lián)系,前一次要為后一次做準(zhǔn)備(一般前一次的輸出就作為后一次的輸入);三是在問題的規(guī)模極小時(shí)必須用直接給出解答而不再進(jìn)行遞歸調(diào)用,因而每次遞歸調(diào)用都是有條件的(以規(guī)模未達(dá)成直接解答的大小為條件),無條件遞歸調(diào)用將會成為死循環(huán)而不能正常結(jié)束。2.程序源代碼:#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#definenull0
structnode
{
chardata;
structnode*lchild;
structnode*rchild;
};
//先序,中序建樹
structnode*create(char*pre,char*ord,intn)
{
structnode*head;
intordsit;
head=null;
if(n<=0)
{
returnnull;
}
else
{
head=(structnode*)malloc(sizeof(structnode));
head->data=*pre;
head->lchild=head->rchild=null;
ordsit=0;
while(ord[ordsit]!=*pre)
{
ordsit++;
}
head->lchild=create(pre+1,ord,ordsit);
head->rchild=create(pre+ordsi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- QC/T 1217-2024車載有線高速媒體傳輸萬兆全雙工系統(tǒng)技術(shù)要求及試驗(yàn)方法
- 人民版道德與法治九年級上冊第五課《小康家園》配套聽課評課記錄
- 人教新課標(biāo)地理七年級上冊《2.2 海陸的變遷》聽課評課記錄
- 湘教版地理七年級上冊 第三章 第三節(jié)《世界的語言與宗教》聽課評課記錄
- 人教版數(shù)學(xué)八年級下冊聽評課記錄:第20章復(fù)習(xí)課(二)
- 環(huán)評招募合伙協(xié)議書(2篇)
- 新版華東師大版八年級數(shù)學(xué)下冊《16.1.1分式》聽評課記錄2
- 星球版地理八年級上冊《第二節(jié) 眾多的人口》聽課評課記錄1
- 五年級上冊數(shù)學(xué)聽評課記錄《數(shù)學(xué)好玩-圖形中的規(guī)律》(4)北師大版
- 蘇科版數(shù)學(xué)八年級上冊聽評課記錄《4-4近似數(shù)》
- 中國氫內(nèi)燃機(jī)行業(yè)發(fā)展環(huán)境、市場運(yùn)行格局及前景研究報(bào)告-智研咨詢(2024版)
- 《自然保護(hù)區(qū)劃分》課件
- 2025年普通卷釘項(xiàng)目可行性研究報(bào)告
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 上海鐵路局招聘筆試沖刺題2025
- 學(xué)校食堂餐廳管理者食堂安全考試題附答案
- 《商用車預(yù)見性巡航系統(tǒng)技術(shù)規(guī)范》
- 國旗班指揮刀訓(xùn)練動(dòng)作要領(lǐng)
- 春季安全開學(xué)第一課
- 植物芳香油的提取 植物有效成分的提取教學(xué)課件
- 陜鼓集團(tuán)招聘筆試題目
評論
0/150
提交評論