廣州大學(xué)松田學(xué)院7數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)題-樹-參考答案_第1頁
廣州大學(xué)松田學(xué)院7數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)題-樹-參考答案_第2頁
廣州大學(xué)松田學(xué)院7數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)題-樹-參考答案_第3頁
廣州大學(xué)松田學(xué)院7數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)題-樹-參考答案_第4頁
廣州大學(xué)松田學(xué)院7數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)題-樹-參考答案_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)題(二叉樹)一.判斷題(下列各題,正確的請在前面的括號內(nèi)打√;錯誤的打╳)(√)(1)樹結(jié)構(gòu)中每個結(jié)點最多只有一個直接前驅(qū)。(ㄨ)(2)完全二叉樹一定是滿二查樹。(ㄨ)(3)在中序線索二叉樹中,右線索若不為空,則一定指向其雙親。(√)(4)一棵二叉樹中序遍歷序列的最后一個結(jié)點,必定是該二叉樹前序遍歷的最后一個結(jié)點。(√)(5)二叉樹的前序遍歷中,任意一個結(jié)點均處于其子女結(jié)點的前面。(√)(6)由二叉樹的前序遍歷序列和中序遍歷序列,可以推導(dǎo)出后序遍歷的序列。(√)(7)在完全二叉樹中,若一個結(jié)點沒有左孩子,則它必然是葉子結(jié)點。(ㄨ)(8)在哈夫曼編碼中,當(dāng)兩個字符出現(xiàn)的頻率相同,其編碼也相同,對于這種情況應(yīng)該做特殊處理。(ㄨ)(9)含多于兩棵樹的森林轉(zhuǎn)換的二叉樹,其根結(jié)點一定無右孩子。(√)(10)具有n個葉子結(jié)點的哈夫曼樹共有2n-1個結(jié)點。二.填空題在樹中,一個結(jié)點所擁有的子樹數(shù)稱為該結(jié)點的度。度為零的結(jié)點稱為葉(或葉子,或終端)結(jié)點。樹中結(jié)點的最大層次稱為樹的深度(或高度)。對于二叉樹來說,第i層上至多有2i-1個結(jié)點。深度為h的二叉樹至多有2h-1個結(jié)點。由一棵二叉樹的前序序列和中序序列可唯一確定這棵二叉樹。有20個結(jié)點的完全二叉樹,編號為10的結(jié)點的父結(jié)點的編號是5。哈夫曼樹是帶權(quán)路徑長度最小的二叉樹。由二叉樹的后序和中序遍歷序列,可以唯一確定一棵二叉樹。某二叉樹的中序遍歷序列為:DEBAC,后序遍歷序列為:EBCAD。則前序遍歷序列為:DABEC。設(shè)一棵二叉樹結(jié)點的先序遍歷序歷為:ABDECFGH,中序遍歷序歷為:DEBAFCHG,則二叉樹中葉結(jié)點是:E、F、H。已知完全二叉樹的第8層有8個結(jié)點,則其葉結(jié)點數(shù)是68。由樹轉(zhuǎn)換成二叉樹時,其根結(jié)點無右子樹。采用二叉鏈表存儲的n個結(jié)點的二叉樹,一共有2n個指針域。采用二叉鏈表存儲的n個結(jié)點的二叉樹,共有空指針n+1個。前序為A,B,C且后序為C,B,A的二叉樹共有4種。AACBABCABCACB(17)三個結(jié)點可以組成2種不同形態(tài)的樹。(18)將一棵完全二叉樹按層次編號,對于任意一個編號為i的結(jié)點,其左孩子結(jié)點的編號為:2*i。(19)給定如下圖所示的二叉樹,其前序遍歷序列為:ABEFHCG。AABFGHDCE(20)給定如下圖所示的二叉樹,其層次遍歷序列為:ABCEFGH。AABFGHDCE三.選擇題(1)樹最適合用來表示(D)。A.有序數(shù)據(jù)元素B.無序數(shù)據(jù)元素C.元素之間無聯(lián)系的數(shù)據(jù)D.元素之間有分支的層次關(guān)系(2)前序為A,B,C的二叉樹共有(D)種。A.2 B.3 C.4 D(3)根據(jù)二叉樹的定義,具有3個結(jié)點的二叉樹有(C)種樹型。A.3 B.4 C.5 D.6(4)在一棵具有五層的滿二叉樹中,結(jié)點的總數(shù)為(B)A.16B.31C.32D.33(5)具有64個結(jié)點的完全二叉樹的深度為(C)A.5 B.6 C.7 D.(6)任何一棵二叉樹的葉結(jié)點在前序、中序、后序遍歷序列中的相對次序(A)。A.不發(fā)生改變B.發(fā)生改變C.不能確定D.以上都不對(7)A,B為一棵二叉樹上的兩個結(jié)點,在中序遍歷時,A在B前的條件是(C)。A.A在B右方B.A是B祖先C.A在B左方D.A是B子孫(8)下列4棵樹中,(B)不是完全二叉樹。A.B.C.D.ABECABECDABCDABEFCDABEGFDCD(9)如右圖所示的二叉樹,后序遍歷的序列是(D)ABADECFGHIA.A、B、C、D、ABADECFGHIB.A、B、D、H、I、E、C、F、GC.H、D、I、B、E、A、F、C、GD.H、I、D、E、B、F、G、C、A(10)對于下邊的二叉樹,其中序序列為(A)A.DBEHAFCGB.DBHEAFCGC.ABDEHCFGD.ABCDEFGH(11)某二叉樹的后序遍歷序列為:DABEC,中序遍歷序列為:DEBAC,則前序遍歷序列為(D)。A.ACBED B.DECAB C.DEABCD.CEDBA(12)具有n(n>1)個結(jié)點的完全二叉樹中,結(jié)點i(2i>n)的左孩子結(jié)點是(D)。A.2i B.2i+1 C.2i-1 D.不存在(若2i<=n,則答案為A)(13)把一棵樹轉(zhuǎn)換為二叉樹后,這棵二叉樹的形態(tài)是(A)。A.唯一的B.有多種C.有多種,但根結(jié)點都沒有左孩子D.有多種,但根結(jié)點都沒有右孩子(14)將一棵有100個結(jié)點的完全二叉樹從上到下,從左到右依次對結(jié)點編號,根結(jié)點的編號為1,則編號為45的結(jié)點的左孩子編號為(B)。A.46 B.47 C.90 D(15)將一棵有100個結(jié)點的完全二叉樹從上到下,從左到右依次對結(jié)點編號,根結(jié)點的編號為1,則編號為49的結(jié)點的右孩子編號為(B)。A.98 B.99 C.50 D.100(16)二叉樹按某種順序線索化后,任一結(jié)點均有指向其前驅(qū)和后繼的線索,這種說法(B)。A.正確B.錯誤 C.不確定D.都有可能(17)下列陳述正確的是(D)。A.二叉樹是度為2的有序樹 B.二叉樹中結(jié)點只有一個孩子時無左右之分C.二叉樹中必有度為2的結(jié)點 D.二叉樹中最多只有兩棵子樹,且有左右子樹之分(18)用5個權(quán)值{3,2,4,5,1}構(gòu)造的哈夫曼樹的帶權(quán)路徑長度是(B)。A.32B.33C.34D.15(先構(gòu)造哈夫曼樹,WPL=(1+2)*3+(3+4+5)*2=33)(19)在樹結(jié)構(gòu)中,若結(jié)點B有4個兄弟,A是B的父親結(jié)點,則A的度為為(C)。A.3B.4C.5(20)二叉樹的葉結(jié)點個數(shù)比度為2的結(jié)點的個數(shù)(C)。A.無關(guān) B.相等 C.多一個 D.少一個四.簡答題1.已知一棵樹邊的集合如下,請畫出此樹,并回答問題。{(L,M),(L,N),(E,L),(B,E),(B,D),(A,B),(G,J),(G,K),(C,G),(C,F),(H,I),(C,H),(A,C)}(1)哪個是根結(jié)點?(2)哪些是葉結(jié)點?(3)哪個是G的雙親?(4)哪些是G的祖先?(5)哪些是G的孩子?(6)哪些是E的子孫?(7)哪些是E的兄弟?哪些是F的兄弟?(8)結(jié)點B和N的層次各是多少?(9)樹的深度是多少?(10)以結(jié)點C為根的子樹的深度是多少?(11)樹的度數(shù)是多少?答:(1)A是根結(jié)點。(2)葉結(jié)點:M,N,D,J,K,F(xiàn),I。(3)G的雙親:C。(4)G的祖先:A,C。(5)G的孩子:J,K。(6)E的子孫:L,M,N。(7)E的兄弟:D;F的兄弟:G,H。(8)結(jié)點B的層次為2;結(jié)點N的層次是5。(9)樹的深度是5。(10)以結(jié)點C為根的子樹的深度是3。(11)樹的度數(shù)是3。2.設(shè)下列二叉樹是與某森林對應(yīng)的二叉樹,試回答下列問題。DADABEGICFHJLK (2)每一棵樹的根結(jié)點分別是什么? (3)第一棵樹有幾個結(jié)點? (4)第二棵樹有幾個結(jié)點? (5)森林中有幾個葉結(jié)點?解:(1)4(2)A,C,G,K(3)6(4)2(5)73.二叉樹按中序遍歷的結(jié)果為:ABC,試問有幾種不同形態(tài)的二叉樹可以得到這一遍歷結(jié)果?并畫出這些二叉樹。答:(1)5種。ABABCAADCBBABCACCB4.分別畫出具有3個結(jié)點的樹和三個結(jié)點的二叉樹的所有不同形態(tài)。答:三個結(jié)點的樹三個結(jié)點的二叉樹樹五.應(yīng)用題1.已知一棵二叉樹的后序遍歷和中序遍歷的序列分別為:A,C,D,B,G,I,H,F(xiàn),E和A,B,C,D,E,F(xiàn),G,H,I。請畫出該二叉樹,并寫出它的前序遍歷的序列。BCHDDBCHDDFGEIA其前序遍歷的序列為:EBADCFHGI2.已知一棵二叉樹的前序遍歷和中序遍歷的序列分別為:A,B,D,G,H,C,E,F(xiàn),I和G,D,H,B,A,E,C,I,F(xiàn)。請畫出此二叉樹,并寫出它的后序遍歷的序列。。GHAGHABDCEFI其后序遍歷的序列為:GHDBEIFCA3.已知一棵樹的層次遍歷的序列為:ABCDEFGHIJ,中序遍歷的序列為:DBGEHJACIF,請畫出該二叉樹,并寫出它的后序遍歷的序列。ABABCHDDFGEIJ后序遍歷的序列:DGJHEBIFCA4.把下列一般樹轉(zhuǎn)換為二叉樹1212435678AABFEGHIJCD124124688D537ABCHDDFGEIJ(1)(2)5.把下列森林轉(zhuǎn)換為二叉樹FGKFGKIJHACBDEKAKABCHDDFGEIJ6.把下列二叉樹還原為森林AADBICHFGE解:還原后的二叉樹為:AABCHDDFGEI7.某二叉樹的結(jié)點數(shù)據(jù)采用順序存儲,其結(jié)構(gòu)如下:1234567891011121314151617181920EAFDHCGIB(1)畫出該二叉樹(3分)(2)寫出按層次遍歷的結(jié)點序列(2分)解:ADADHFGECBI(2)層次遍歷的結(jié)點序列:EAFDHCGIB8.某二叉樹的存儲如下:12345678910lchild00237580101dataJHFDBACEGIrchild0009400000 其中根結(jié)點的指針為6,lchild、rchild分別為結(jié)點的左、右孩子的指針域,data為數(shù)據(jù)域。(1)畫出該二叉樹(3分)(2)寫出該樹的前序遍歷的結(jié)點序列(2分)解:BDBDJHGACFEIABCEDFHGIJ9.給定如圖所示二叉樹T,請畫出與其對應(yīng)的中序線索二叉樹。080828D25D33D40D60D08D54D55D3333解:(1)中序遍歷序列:5540256028083354(2)中序線索二叉樹:NULLNULLNULL0828D25D33D40D60D08D54D55D10.畫出表達式:-A+B-C+D的標(biāo)識符樹,并求它們的后綴表達式。解:++ˉ+ˉBDCAD0后綴表達式:0A–B+C–D+11.畫出表達式:(A+B/C-D)*(E*(F+G))的標(biāo)識符樹,并求它們的后綴表達式。ABABC+DDFGE/+*ˉ*后綴表達式:ABC/+D–EFG+**12.對于算術(shù)表達式(A+B*C/D)*E+F*G,畫出標(biāo)識符樹,并求它們的后綴表達式。解:**EGFD*B++*AD/C后綴表達式:ABCD/*+E*FG*+13.給定一個權(quán)集W={4,5,7,8,6,12,18},試畫出相應(yīng)的哈夫曼樹,并計算其帶權(quán)路徑長度WPL。351325D126351325D12660181798D45791317253560WPL=(12+18)*2+(6+7+8)*3+(4+5)*4=15914.給定一個權(quán)集W={3,15,17,14,6,16,9,2},試畫出相應(yīng)的哈夫曼樹,并計算其帶權(quán)路徑長度WPL。4917491733D1698229201514D56113D22369141516175293311204982WPL=(16+17)*2+(9+14+15)*3+6*4+(2+3)*5=22915.假設(shè)用于通信的電文僅由A、B、C、D、E、F、G8個字母組成,字母在電文中出現(xiàn)的頻率分別為7,19,2,6,32,3,21,10。試為這8個字母設(shè)計哈夫曼編碼。解:以權(quán)值:2、3、6、7、10、19、21、32構(gòu)造哈夫曼樹:6651911281740D213260D10000D023D710D0000011111101字母編號字母編號對應(yīng)編碼出現(xiàn)頻率A10107B0019C100002D10016E1132D100013E0121F101110六.算法設(shè)計題以二叉鏈表為存儲結(jié)構(gòu),設(shè)二叉樹BT結(jié)構(gòu)為:typedefstructBT{ chardata; BT*lchild; BT*rchild;}BT;1.求二叉樹中的度數(shù)為2的結(jié)點。2.求二叉樹中值為最大的元素。3.將二叉樹各結(jié)點存儲到一維數(shù)組中。4.前序輸出二叉樹中各結(jié)點及其結(jié)點所在的層號。5.求二叉樹的寬度6.交換二叉樹各結(jié)點的左右子樹。7.寫出在二叉樹中查找值為x的結(jié)點在樹中層數(shù)的算法。解:求二叉樹中的度數(shù)為2的結(jié)點。voidcount(BTt){if(t){if(t->lchild&&t->rchild)k++;count(t->lchild);count(t->rchild);}}求二叉樹中值為最大的元素。intmaxnode(BTt,intmax){if(t){if(t->data>max)max=t->data;max=maxnode(t->lchild,max);max=maxnode(t->rchild,max);}}3.將二叉樹各結(jié)點存儲到一維數(shù)組中。voidcreate(BTt,inta[],inti){if(t){a[i]=t->data;create(t->lchild,a,2*i);create(t->rchild,a,2*i+1);}}4.前序輸出二叉樹中各結(jié)點及其結(jié)點所在的層號。voidpreorderlevel(BTt,inth)//t的層數(shù)為h{if(t!=NULL){printf(“%d,%d”,t->data,h);preorderlevel(t->lchild,h+1);preorderlevel(t->rchild,h+1);}}求二叉樹的寬度思想:按層遍歷二叉樹,采用一個隊列q,讓根結(jié)點入隊列,最后出隊列,若有左右子樹,則左右子樹根結(jié)點入隊列,如此反復(fù),直到隊列為空。intWidth(BT*T){intfront=-1,rear=-1;//隊列初始化intflag=0,count=0,p;//p用于指向樹中層的最右邊的結(jié)點,標(biāo)志flag記錄層中結(jié)點數(shù)的最大值if(T!=NULL){rear++;q[rear]=T;flag=1;p=rear;}while(front<p){front++;T=q[front];if(T->lchild!=NULL){rear++;q[rear]=T->lchild;count++;}if(T->rchild!=NULL){rear++;q[rear]=T->rchild;count++;}if(front==p) //當(dāng)前層已遍歷完畢{if(flag<count)flag=count;count=0;p=rear; //p指向下一層最右邊的結(jié)點}} //endwhilereturn(flag);}6.解:借助棧來進行對換。Swap(BinTree*T){BinTree*stack[100],*temp;inttop=-1;root=T;if(T!=NULL){top++;stack[top]=T;while(top>-1){T=stack[top];top--;if(T->child!=NULL||T->rchild!=NULL){//交換結(jié)點的左右指針temp=T->lchild;T->lchild=T->rchild;T->rchild=temp;}if(T->lchild!=NULL){top++;stack[top]=T->lchild;}if(T->rchild!=NULL){top++;stack[top]=T->rchild;}}}}main(){intI,j,k,l;printf(“\n”);root=CreateBinTree();Inorder(root);i=CountNode(root);j=CountLeafs(root);k=Depth(root);l=Width(root);printf(“\nTheNode’sNumber:%d”,i);printf(“\nTheLeafs’sNumber:%d”,j);printf(“\nTheDepthis:%d”,k);printf(“\nThewidthis:%d”,l);Swap(root);Printf(“\nTheswapTreeis:”);Inorder(root);}7.解:inth=-1,lh=1,count=0;charx=’c’;//賦初值Level(BinTreeT,inth,intlh)//求X結(jié)點在樹只的層樹{if(T==Null)h=0;elseif(T->data==x){h=lh;count=h;}else{h++;Level(T->lchild,h,lh);if(h==-1)Level(T->rchild,h,lh);}}main(){BinTree*(*newroot);Printf(“\n”);Root=CreateBinTree();Inorder(root);Printf(“\n”);Level(root,h,lh);Printf(“%d”,count);}

模擬考題一.讀程序,寫出運行結(jié)果1.二叉樹的結(jié)構(gòu)如圖所示,試寫出執(zhí)行下列算法后的輸出結(jié)果:。(用大寫的英文字母表示,字母之間不要任何間隔符號,最后一個字母后面也不要間隔符號)CFCFBDADGE{datatypedata;BT*lchild;BT*rchild;}BT;voidPreorder(BT*T){ if(T!=NULL){ cout<<T->data; Preorder(T->lchild); Preorder(T->rchild);}}解:ABCEDFG先序遍歷2.二叉樹的結(jié)構(gòu)如圖所示,試寫出執(zhí)行下列算法后的輸出結(jié)果:。typedefstructBTCFCFBDADGEBT*lchild;BT*rchild;}BT;intBTD(BT*T){ intldep,rdep; if(T==NULL) return0; else {ldep=BTD(T->lchild); rdep=BTD(T->rchild); if(ldep>rdep) returnldep+1; else returnrdep+1;}}解:4(求二叉樹深度)3.二叉樹的結(jié)構(gòu)如圖所示,試寫出執(zhí)行下列算法后,count的值為多少?CFCFBDADGE{datatypedata;//定義結(jié)點BT*lchild;BT*rchild;}BT;intcount=0;voidLeafnum(BT*T){ if(T!=NULL){if(T->lchild==NULL&&T->rchild==NULL) count++; Leafnum(T->lchild); Leafnum(T->rchild);}}解:3(求葉結(jié)點數(shù))(2,3,4改為程序填空)二.程序填空1.填空完成二叉樹按層次遍歷的程序typedefstructBT{datatypedata;//定義結(jié)點BT*lchild;BT*rchild;}BT;voidLevelorder(BT*T) //層次遍歷{ inti,j; BT*q[100],*p; p=T; if(p!=NULL){i=1;q[i]=p;j=2;} while(i!=j){p=q[i];cout<<p->data; if(p->lchild!=NULL) {q[j]=p->lchild;j++;} if(p->rchild!=NULL) {q[j]=p->rchild;j++;} i++; }}}

三.應(yīng)用題1.將下列二叉樹轉(zhuǎn)換為森林。DDABEGICFHJK解:DDABIHDECFGJK2.畫出和下列二叉樹相應(yīng)的森林。DADABHCJEKGFIM(根右邊的子樹肯定是森林,而孩子結(jié)點的右子樹均為兄弟)3.某二叉樹的結(jié)點數(shù)據(jù)采用順序存儲,其結(jié)構(gòu)如下:1234567891011121314151617181920EAFDHCGIB(1)畫出該二叉樹(2分)(2)寫出結(jié)點值為D的父結(jié)點及左、右子樹(3分)解:ADADHFGECBI(2)D的父結(jié)點為AD的左子樹為CD的右子樹為空4.某二叉樹的存儲如下:12345678910Lchild00237580101DataJHFDBACEGIRch

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論