版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
問題一: 二叉樹遍歷問題描述設(shè)輸入該二叉樹的前序序列為:ABC##DE#G##F##HI##J#K##(#代表空子樹)請(qǐng)編程完成下列任務(wù):⑴請(qǐng)根據(jù)此輸入來建立該二叉樹,并輸出該二叉樹的前序、中序和后序序列;⑵按層次遍歷的方法來輸出該二叉樹按層次遍歷的序列;⑶求該二叉樹的高度。設(shè)計(jì)描述1)二叉樹是一種樹形結(jié)構(gòu),遍歷就是要讓樹中的所有節(jié)點(diǎn)被且僅被訪問一次,即按一定規(guī)律排列成一個(gè)線性隊(duì)列。二叉(子)樹是一種遞歸定義的結(jié)構(gòu),包含三個(gè)部分:根結(jié)點(diǎn)(N)、左子樹(L)、右子樹(R)。根據(jù)這三個(gè)部分的訪問次序?qū)Χ鏄涞谋闅v進(jìn)行分類, 總共有 6種遍歷方案:NLR、LNR、LRN、NRL、RNL和LNR。研究二叉樹的遍歷就是研究這 6種具體的遍歷方案,顯然根據(jù)簡(jiǎn)單的對(duì)稱性,左子樹和右子樹的遍歷可互換,即 NLR與NRL、LNR與RNL、LRN與RLN,分別相類似,因而只需研究 NLR、LNR和LRN三種即可,分別稱為“先序遍歷” 、“中序遍歷”和“后序遍歷” 。采用遞歸方式就可以容易的實(shí)現(xiàn)二叉樹的遍歷,算法簡(jiǎn)單且直觀。(2)此外,二叉樹的層次遍歷即按照二叉樹的層次結(jié)構(gòu)進(jìn)行遍歷, 按照從上到下,同一層從左到右的次序訪問各節(jié)點(diǎn)。 遍歷算法可以利用隊(duì)列來實(shí)現(xiàn), 開始時(shí)將整個(gè)樹的根節(jié)點(diǎn)入隊(duì),然后每從隊(duì)列中刪除一個(gè)節(jié)點(diǎn)并輸出該節(jié)點(diǎn)的值時(shí),都將它的非空的左右子樹入隊(duì),當(dāng)隊(duì)列結(jié)束時(shí)算法結(jié)束。(3)計(jì)算二叉樹高度也是利用遞歸來實(shí)現(xiàn): 若一顆二叉樹為空, 則它的深度為0,否則深度等于左右子樹的最大深度加一。3.源程序#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineElemTypecharstructBTreeNode{6ElemTypedata;7structBTreeNode*left;8structBTreeNode*right;};voidCreateBTree(structBTreeNode**T){12charch;13scanf_s("\n%c",&ch);14if(ch=='#')*T=NULL;15else{16(*T)=malloc(sizeof(structBTreeNode));17(*T)->data=ch;18CreateBTree(&((*T)->left));19CreateBTree(&((*T)->right));20}}voidPreorder(structBTreeNode*T){24if(T!=NULL){25printf("%c",T->data);26Preorder(T->left);27Preorder(T->right);28}}voidInorder(structBTreeNode*T){32if(T!=NULL){33Inorder(T->left);34printf("%c",T->data);35Inorder(T->right);36}}voidPostorder(structBTreeNode*T){40if(T!=NULL){41Postorder(T->left);42Postorder(T->right);43printf("%c",T->data);44}}voidLevelorder(structBTreeNode*BT)47{48structBTreeNode*p;49structBTreeNode*q[30];50intfront=0,rear=0;51if(BT!=NULL){52rear=(rear+1)%30;53q[rear]=BT;54}55while(front!=rear){56front=(front+1)%30;57p=q[front];58printf("%c",p->data);59if(p->left!=NULL){60rear=(rear+1)%30;61q[rear]=p->left;62}63if(p->right!=NULL){64rear=(rear+1)%30;65q[rear]=p->right;66}67}}intgetHeight(structBTreeNode*T){71intlh,rh;72if(T==NULL)return0;73lh=getHeight(T->left);74rh=getHeight(T->right);75returnlh>rh?lh+1:rh+1;}voidmain(void){79structBTreeNode*T;80CreateBTree(&T);81printf("前序序列:\n");82Preorder(T);83printf("\n");84printf("中序序列:\n");85Inorder(T);86printf("\n");87printf("后序序列:\n");88Postorder(T);89printf("\n");90printf("層次遍歷序列:\n");91Levelorder(T);92printf("\n");93printf("二叉樹高度:%d\n",getHeight(T));94}運(yùn)行結(jié)果問題二: 哈夫曼編碼、譯碼系統(tǒng)問題描述對(duì)一個(gè)ASCII編碼的文本文件中的字符進(jìn)行哈夫曼編碼, 生成編碼文件;反過來,可將編碼文件譯碼還原為一個(gè)文本文件(選做) 。從文件中讀入給定的一篇英文短文 (文件為 ASCII編碼,擴(kuò)展名為 txt);統(tǒng)計(jì)并輸出不同字符在文章中出現(xiàn)的頻率 (空格、換行、標(biāo)點(diǎn)等不按字符處理);根據(jù)字符頻率構(gòu)造哈夫曼樹,并給出每個(gè)字符的哈夫曼編碼;將文本文件利用哈夫曼樹進(jìn)行編碼,存儲(chǔ)成編碼文件(編碼文件后綴名.huf)進(jìn)行譯碼,將比較。(選做)
huf
文件譯碼為
ASCII
編碼的
txt
文件,與原
txt
文件進(jìn)行2. 設(shè)計(jì)描述(1)統(tǒng)計(jì)并輸出不同字符在文章中出現(xiàn)的頻率,通過建立兩個(gè)數(shù)組chs_freq 來實(shí)現(xiàn),chs存儲(chǔ)文件中出現(xiàn)過的字符, chs_freq
chs和(初始化為全 0)存儲(chǔ)對(duì)應(yīng)字符在文件中出現(xiàn)的頻數(shù),當(dāng)掃描一個(gè)字符時(shí),先與chs中已有字符進(jìn)行比較,若數(shù)組中存在該字符,則將該字符對(duì)應(yīng)頻數(shù)加1,否則則將該字符加入數(shù)組,并頻數(shù)加 1。(2)根據(jù)字符頻率構(gòu)造哈夫曼樹, 即將chs_freq 數(shù)組作為權(quán)值數(shù)組, 建立哈夫曼樹,為了方便后續(xù)操作,為結(jié)構(gòu)體 BtreeNode添加一個(gè)新的成員變量symbol,建立二叉樹時(shí)用以存儲(chǔ)對(duì)應(yīng)權(quán)值的字符。3)通過最優(yōu)二叉樹(哈夫曼樹)輸出每個(gè)字符的哈夫曼編碼,是利用遞歸實(shí)現(xiàn)的,訪問非葉子節(jié)點(diǎn)時(shí),分別向左右子樹遞歸調(diào)用,并將分支上的01編碼保存到數(shù)組a對(duì)應(yīng)元素中,向下一層len++。訪問到非葉子節(jié)點(diǎn)時(shí)輸出其保存在數(shù)組中的編碼序列,并將其保存至哈夫曼編碼文件orde.code。4)將文本文件利用哈夫曼樹進(jìn)行編碼:每從文本文件中讀取一個(gè)字符,則在哈夫曼編碼文件order.code查找該字符,查找到后將該字符對(duì)應(yīng)哈夫曼編碼寫入編碼后文件order.huf。并將order.code文件指針重新指向開頭,準(zhǔn)備對(duì)下一個(gè)字符進(jìn)行操作。3.源程序#include<stdio.h>#include<stdlib.h>typedefintElemType;structBTreeNode{5ElemTypedata;6structBTreeNode*left;7structBTreeNode*right;8charsymbol;9};10voidCountChar(FILE*fp,char*chs,int*ch_freq){11intnum=0;12inti,tmp;13charch=fgetc(fp);14while(ch!=EOF)15{16if((ch>64&&ch<91)||(ch>96&&ch<123)){17for(tmp=0;tmp<=num;tmp++)18{19if(ch==chs[tmp]){ch_freq[tmp]++;break;}20if(tmp==num){chs[num]=ch;ch_freq[num]++;num++;break;}21}22}23ch=fgetc(fp);24}25chs[num]='\0';26for(i=0;i<num;i++)printf("%c%d\n",chs[i],ch_freq[i]);}structBTreeNode*CreateHuffman(ElemTypea[],intn,charss[]){29inti,j;30structBTreeNode**b,*q;31q=malloc(sizeof(structBTreeNode));32b=malloc(n*sizeof(structBTreeNode*));33for(i=0;i<n;i++){34b[i]=malloc(sizeof(structBTreeNode));35b[i]->data=a[i];b[i]->left=b[i]->right=NULL;b[i]->symbol=ss[i];36}37for(i=1;i<n;i++){38intk1=-1,k2;39for(j=0;j<n;j++){40if(b[j]!=NULL&&k1==-1){k1=j;continue;}41if(b[j]!=NULL){k2=j;break;}42}43for(j=k2;j<n;j++){44if(b[j]!=NULL){45if(b[j]->data<b[k1]->data){k2=k1;k1=j;}46elseif(b[j]->data<b[k2]->data)k2=j;47}48}49q=malloc(sizeof(structBTreeNode));50q->data=b[k1]->data+b[k2]->data;51q->left=b[k1];q->right=b[k2];52b[k1]=q;b[k2]=NULL;53}54free(b);55returnq;};voidHuffCoding(structBTreeNode*FBT,intlen){58staticinta[50];59chartmp;60FILE*fp;61inti;62if(len==0)fp=fopen("order.code","w");63if((fp=fopen("order.code","a"))==NULL){printf("文件打開失??!64if(FBT!=NULL){65if(FBT->left==NULL&&FBT->right==NULL){66printf("%c霍夫曼編碼為:",FBT->symbol);67fputc(FBT->symbol,fp);68fputc('\t',fp);69for(i=0;i<len;i++){70printf("%d",a[i]);71tmp=a[i]+48;72fputc(tmp,fp);73}74printf("\n");fputc('\n',fp);75}76else{77a[len]=0;HuffCoding(FBT->left,len+1);78a[len]=1;HuffCoding(FBT->right,len+1);79}80}81fclose(fp);}voidTransCode(FILE*src){84FILE*fp1,*fp2;85charch1,ch2;86if((fp1=fopen("order.code","r"))==NULL){printf("文件打開失?。?7if((fp2=fopen("order.huf","w"))==NULL){printf("文件打開失??!88fseek(src,0L,SEEK_SET);89ch1=fgetc(src);90ch2=fgetc(fp1);91while(ch1!=EOF)92{93if((ch1>64&&ch1<91)||(ch1>96&&ch1<123)){94while(ch2!=EOF){95if(ch2==ch1){96fgetc(fp1);9
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 16830:2025 EN Specification of bamboo drinking straws
- 江西師范大學(xué)科學(xué)技術(shù)學(xué)院《建筑設(shè)備施工組織設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南中醫(yī)藥大學(xué)湘杏學(xué)院《水電站建筑物》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南工藝美術(shù)職業(yè)學(xué)院《多媒體信息處理與檢索技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 衡陽科技職業(yè)學(xué)院《統(tǒng)計(jì)軟件操作》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江師范大學(xué)《能源與動(dòng)力工程測(cè)試技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 長(zhǎng)春師范大學(xué)《衛(wèi)生檢驗(yàn)綜合技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 榆林職業(yè)技術(shù)學(xué)院《太陽能熱利用技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 使用二手設(shè)備節(jié)約資本開支
- 實(shí)踐學(xué)習(xí)實(shí)施報(bào)告
- 特色酒吧方案計(jì)劃書
- 重慶市南開中學(xué)2023-2024學(xué)年中考三模英語試題含答案
- 2023年上海高中物理合格考模擬試卷一含詳解
- 2022版義務(wù)教育(地理)課程標(biāo)準(zhǔn)(附課標(biāo)解讀)
- 2024年滑雪用品行業(yè)分析報(bào)告及未來發(fā)展趨勢(shì)
- 經(jīng)方治療腦梗塞的體會(huì)
- 新版DFMEA基礎(chǔ)知識(shí)解析與運(yùn)用-培訓(xùn)教材
- 制氮機(jī)操作安全規(guī)程
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(全真題庫)
- 護(hù)理安全用氧培訓(xùn)課件
- 《三國(guó)演義》中人物性格探析研究性課題報(bào)告
評(píng)論
0/150
提交評(píng)論