版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告一一實(shí)驗(yàn)7
一、實(shí)驗(yàn)?zāi)康?/p>
掌握二叉鏈表及二叉樹(shù)的創(chuàng)建、遍歷;
二、實(shí)驗(yàn)內(nèi)容
1、(必做題)假設(shè)二叉樹(shù)中數(shù)據(jù)元素類型是字符型,請(qǐng)采用二叉鏈表實(shí)現(xiàn)二叉樹(shù)的以下基本操作:
(1)根據(jù)二叉樹(shù)的先序序列和中序序列構(gòu)造二叉樹(shù);
(2)根據(jù)先序遍歷二叉樹(shù);
(3)根據(jù)中序遍歷二叉樹(shù);
(4)根據(jù)后序遍歷二叉樹(shù)。
測(cè)試數(shù)據(jù)包括如下錯(cuò)誤數(shù)據(jù):
先序:1234;中序:12345
先序:1234;中序:1245
先序:1234;中序:4231
2、(必做題)對(duì)于一棵二叉樹(shù),請(qǐng)實(shí)現(xiàn):
(1)計(jì)算二叉樹(shù)的葉子數(shù)目;
(2)計(jì)算二叉樹(shù)的深度。
3、(選做題)給定n個(gè)權(quán)值,請(qǐng)構(gòu)造它們的最優(yōu)二叉樹(shù)(赫夫曼樹(shù))。
三、算法描述
(采用自然語(yǔ)言描述)
1,分別輸入n個(gè)先序序列和中序序列,先序序列中第一個(gè)字符為根節(jié)點(diǎn),在中序序列中找到根節(jié)
點(diǎn)所在的位置,在根節(jié)點(diǎn)左邊的為左子樹(shù)節(jié)點(diǎn),在根節(jié)點(diǎn)右邊的為右子樹(shù)節(jié)點(diǎn),然后采用遞歸的形式依
次對(duì)左右子樹(shù)進(jìn)行構(gòu)造;二叉樹(shù)的遍歷也是采用遞歸的形式,先序遍歷二叉樹(shù):先序遍歷根,先序遍歷
左子樹(shù),先序遍歷右子樹(shù);中序遍歷二叉樹(shù):中序遍歷左子樹(shù),中序遍歷根,中序遍歷右子樹(shù);后序遍
歷二叉樹(shù):后序遍歷左子樹(shù),后序遍歷右子樹(shù),后序遍歷根。
四、詳細(xì)設(shè)計(jì)
(畫(huà)出程序流程圖)
五、程序代碼
(給出必要注釋)
1、
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#defineN100
typedefcharElementType;
typedefstructnode
(
ElementTypedata;
structnode*leftChild;
structnode*rightChild;
}BTNode;
BTNode*createBT(char*pre,char*in,intn)
(
BTNode*b;
char*p;
intk;
if(n<=0)
returnNULL;
b=(BTNode*)malloc(sizeof(BTNode));
b->data=*pre;
intj=0;
for(p=in;p<in+n;p++)
(
if(*p==*pre)
break;
)
k=p-in;
b->leftChild=createBT(pre+1,in,k);
b->rightChild=createBT(pre+1+k,p+1,n-k-1);
returnb;
voidshowBTPreOrder(BTNode*b)
if(b!=NULL)
(
printf("%cn,b->data);
showBTPreOrder(b->leftChild);
showBTPreOrder(b->rightChild);
voidshowBTInOrder(BTNode*b)
(
if(b!=NULL)
(
showBTInOrder(b->leftChild);
printf(M%c",b->data);
showBTInOrder(b->rightChild);
)
)
voidshowBTTailOrder(BTNode*b)
(
if(b==NULL)
return;
showBTTailOrder(b->leftChild);
showBTTailOrder(b->rightChild);
printf(H%c*',b->data);
)
intmain()
{
charpre[N];
charin[N];
intn=0;
charch;
BTNode*b=NULL;
printf("請(qǐng)輸入先序序列\(zhòng)n");
while((ch=getchar())&&ch!
pre|n++]=ch;
printf("請(qǐng)輸入中序序列\(zhòng)n");
n=0;
while((ch=getchar())&&ch!='\n')
in[n++]=ch;
b=createBT(pre,in,n);
printf("先序遍歷二叉樹(shù):\n");
showBTPreOrder(b);
printf("\nM);
printf("中序遍歷二叉樹(shù):\n)
showBTInOrder(b);
printf(n\nM);
printf("后序遍歷二叉樹(shù):\n");
showBTTailOrder(b);
printf(n\nn);
return0;
)
2、
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#defineN100
typedefcharElementType;
typedefstructnode
{
ElementTypedata;
structnode*leftChild;
structnode*rightChild;
JBTNode;
BTNode*createBT(char*pre,char*in,intn)
(
BTNode*b;
char*p;
intk;
if(n<=0)
returnNULL;
b=(BTNode*)malloc(sizeof(BTNode));
b->data=*pre;
intj=0;
for(p=in;p<in+n;p++)
if(*p==*pre)
break;
)
k=p-in;
b->leftChild=createBT(pre+1,in,k);
b->rightChild=createBT(pre+1+k,p+1,n-k-1);
returnb;
)
intCounl(BTNode*top){
if(top==NULL){
return0;
)
elseif((top->leftChild==NULL)&&(top->rightChild==NULL)){
return1;
}
else{
returnCount(top->leftChild)+Count(top->rightChild);
)
)
intTreeDepth(BTNode*top)
(
intrightdep=0;
intleftdep=0;
if(top==NULL)
return-1;
if(top->leftChild!=NULL)
leftdep=TreeDepth(top->leftChild);
else
leftdep=-l;
if(top->rightChild!=NULL)
rightdep=TreeDepth(top->rightChild);
else
rightdep="l;
return(rightdep>leftdep)?rightdep+1:leftdep+1;
intmain()
charpre[N];
charin[N];
intn=0;
charch;
BTNode*b=NULL;
printf("請(qǐng)輸入先序序列\(zhòng)n)
while((ch=getchar())&&ch!='\n')
pre[n++]=ch;
printf("請(qǐng)輸入中序序列\(zhòng)n)
n=0;
while((ch=getchar())&&ch!='\n')
in[n++]=ch;
b=createBT(pre,in,n);
printf("二叉樹(shù)的葉子數(shù)目為:%d\n",Count(b));
printf("二叉樹(shù)的深度為:%d\n",TreeDepth(b));
return0;
}
六、測(cè)試和結(jié)果
(給出測(cè)試用例,并給出測(cè)試結(jié)果)
1、
■C:\Users\Administrator\Desktop\shiyan7_1_1\bin\Debug\shiyan7_1_1.exe
請(qǐng)輸入先序序列
ABDHKECFIGJ
請(qǐng)輸入中序序列
HKDBEAIFCGJ
先序遍歷二叉樹(shù):
ABDHKECFIGJ
巾序遍歷二叉樹(shù):
HKDBEAIFCGJ
后序遍歷二叉樹(shù):
KHDEBIFJGCA
Processreturned0(0x0)executiontime:25.048s
Pres
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廣西柳州柳北區(qū)錦繡街道辦事處招聘公益性崗位1人參考考試題庫(kù)及答案解析
- 2025河南新鄉(xiāng)封丘縣建勛學(xué)校招聘?jìng)淇脊P試題庫(kù)及答案解析
- 2025山東陽(yáng)昇甄選產(chǎn)業(yè)運(yùn)營(yíng)有限公司選聘7人考試參考試題及答案解析
- 2025年杭州市臨安區(qū)第三人民醫(yī)院招聘編外工作人員2人備考筆試試題及答案解析
- 2025甘肅嘉峪關(guān)市第三幼兒園招聘公益性崗位人員2人備考考試題庫(kù)及答案解析
- 2025廣東中山大學(xué)腫瘤防治中心肝臟外科陳敏山教授課題組自聘技術(shù)員招聘2人參考考試試題及答案解析
- 美業(yè)聘用合同范本
- 職業(yè)病禁忌協(xié)議書(shū)
- 職工非工亡協(xié)議書(shū)
- 聯(lián)合攝制合同范本
- 卓有成效的管理者要事優(yōu)先
- 生產(chǎn)車(chē)間安全管理檢查表及整改措施
- 電廠標(biāo)識(shí)系統(tǒng)KKS編碼說(shuō)明pdf
- 2023年郴州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性考試題庫(kù)及答案詳解1套
- 2025年福建省綜合評(píng)標(biāo)專家?guī)炜荚囶}庫(kù)(二)
- 完整版醫(yī)療器械基礎(chǔ)知識(shí)培訓(xùn)考試試題及答案
- 220kV電網(wǎng)輸電線路的繼電保護(hù)設(shè)計(jì)
- 《無(wú)人機(jī)地面站與任務(wù)規(guī)劃》 課件全套 第1-9章 概論 -無(wú)人機(jī)內(nèi)業(yè)數(shù)據(jù)整與處理
- 屋頂光伏承重安全檢測(cè)鑒定
- 長(zhǎng)輸管道項(xiàng)目驗(yàn)收總結(jié)與報(bào)告
- 2025年高考數(shù)學(xué)真題分類匯編專題03 三角函數(shù)(全國(guó))(解析版)
評(píng)論
0/150
提交評(píng)論