




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章 樹和二叉樹1選擇題(1)把一棵樹轉(zhuǎn)換為二叉樹后,這棵二叉樹的形態(tài)是( )。 A唯一的 有多種C有多種,但根結(jié)點(diǎn)都沒有左孩子 有多種,但根結(jié)點(diǎn)都沒有右孩子答案:A 解釋:因?yàn)槎鏄溆凶蠛⒆?、右孩子之分,故一棵樹轉(zhuǎn)換為二叉樹后,這棵二叉樹的形態(tài)是唯一的。(2)由3個(gè)結(jié)點(diǎn)可以構(gòu)造出多少種不同的二叉樹?( )A2 B3 C4 D5 答案:D解釋:五種情況如下: (3)一棵完全二叉樹上有1001個(gè)結(jié)點(diǎn),其中葉子結(jié)點(diǎn)的個(gè)數(shù)是( )。A250 B 500 C254 D501 答案:D解釋:設(shè)度為0結(jié)點(diǎn)(葉子結(jié)點(diǎn))個(gè)數(shù)為A,度為1的結(jié)點(diǎn)個(gè)數(shù)為B,度為2的結(jié)點(diǎn)個(gè)數(shù)為C,有A=C+1,A+B+C=1001
2、,可得2C+B=1000,由完全二叉樹的性質(zhì)可得B=0或1,又因?yàn)镃為整數(shù),所以B=0,C=500,A=501,即有501個(gè)葉子結(jié)點(diǎn)。(4)一個(gè)具有1025個(gè)結(jié)點(diǎn)的二叉樹的高h(yuǎn)為( )。A11 B10 C11至1025之間 D10至1024之間答案:C解釋:若每層僅有一個(gè)結(jié)點(diǎn),則樹高h(yuǎn)為1025;且其最小樹高為log21025+1=11,即h在11至1025之間。(5)深度為h的滿m叉樹的第k層有( )個(gè)結(jié)點(diǎn)。(1=k=lchild=NULL&T-rchild=NULL)return 1; /判斷結(jié)點(diǎn)是否是葉子結(jié)點(diǎn)(左孩子右孩子都為空),若是則返回1elsereturn LeafNodeCou
3、nt(T-lchild)+LeafNodeCount(T-rchild);(2)判別兩棵樹是否相等。題目分析先判斷當(dāng)前節(jié)點(diǎn)是否相等(需要處理為空、是否都為空、是否相等),如果當(dāng)前節(jié)點(diǎn)不相等,直接返回兩棵樹不相等;如果當(dāng)前節(jié)點(diǎn)相等,那么就遞歸的判斷他們的左右孩子是否相等。算法描述int compareTree(TreeNode* tree1, TreeNode* tree2)/用分治的方法做,比較當(dāng)前根,然后比較左子樹和右子樹bool tree1IsNull = (tree1=NULL);bool tree2IsNull = (tree2=NULL);if(tree1IsNull != tree
4、2IsNull)return 1;if(tree1IsNull & tree2IsNull)/如果兩個(gè)都是NULL,則相等return 0;/如果根節(jié)點(diǎn)不相等,直接返回不相等,否則的話,看看他們孩子相等不相等if(tree1-c != tree2-c)return 1;return (compareTree(tree1-left,tree2-left)&compareTree(tree1-right,tree2-right) (compareTree(tree1-left,tree2-right)&compareTree(tree1-right,tree2-left);/算法結(jié)束(3)交換二叉
5、樹每個(gè)結(jié)點(diǎn)的左孩子和右孩子。題目分析如果某結(jié)點(diǎn)左右子樹為空,返回,否則交換該結(jié)點(diǎn)左右孩子,然后遞歸交換左右子樹。算法描述void ChangeLR(BiTree &T)BiTree temp;if(T-lchild=NULL&T-rchild=NULL)return;elsetemp = T-lchild;T-lchild = T-rchild;T-rchild = temp;/交換左右孩子ChangeLR(T-lchild); /遞歸交換左子樹ChangeLR(T-rchild); /遞歸交換右子樹(4)設(shè)計(jì)二叉樹的雙序遍歷算法(雙序遍歷是指對(duì)于二叉樹的每一個(gè)結(jié)點(diǎn)來說,先訪問這個(gè)結(jié)點(diǎn),再按雙
6、序遍歷它的左子樹,然后再一次訪問這個(gè)結(jié)點(diǎn),接下來按雙序遍歷它的右子樹)。題目分析若樹為空,返回;若某結(jié)點(diǎn)為葉子結(jié)點(diǎn),則僅輸出該結(jié)點(diǎn);否則先輸出該結(jié)點(diǎn),遞歸遍歷其左子樹,再輸出該結(jié)點(diǎn),遞歸遍歷其右子樹。算法描述void DoubleTraverse(BiTree T)if(T = NULL)return;else if(T-lchild=NULL&T-rchild=NULL)coutdata; /葉子結(jié)點(diǎn)輸出elsecoutdata;DoubleTraverse(T-lchild); /遞歸遍歷左子樹coutdata; DoubleTraverse(T-rchild); /遞歸遍歷右子樹(5)計(jì)
7、算二叉樹最大的寬度(二叉樹的最大寬度是指二叉樹所有層中結(jié)點(diǎn)個(gè)數(shù)的最大值)。題目分析 求二叉樹高度的算法見上題。求最大寬度可采用層次遍歷的方法,記下各層結(jié)點(diǎn)數(shù),每層遍歷完畢,若結(jié)點(diǎn)數(shù)大于原先最大寬度,則修改最大寬度。算法描述int Width(BiTree bt)/求二叉樹bt的最大寬度if (bt=null) return (0); /空二叉樹寬度為0else BiTree Q;/Q是隊(duì)列,元素為二叉樹結(jié)點(diǎn)指針,容量足夠大front=1;rear=1;last=1;/front隊(duì)頭指針,rear隊(duì)尾指針,last同層最右結(jié)點(diǎn)在隊(duì)列中的位置temp=0; maxw=0; /temp記局部寬度,
8、maxw記最大寬度Qrear=bt; /根結(jié)點(diǎn)入隊(duì)列while(frontlchild!=null) Q+rear=p-lchild; /左子女入隊(duì)if (p-rchild!=null) Q+rear=p-rchild; /右子女入隊(duì)if (frontlast) /一層結(jié)束, last=rear;if(tempmaxw) maxw=temp;/last指向下層最右元素, 更新當(dāng)前最大寬度 temp=0; /if /whilereturn (maxw);/結(jié)束width(6)用按層次順序遍歷二叉樹的方法,統(tǒng)計(jì)樹中具有度為1的結(jié)點(diǎn)數(shù)目。題目分析若某個(gè)結(jié)點(diǎn)左子樹空右子樹非空或者右子樹空左子樹非空,則
9、該結(jié)點(diǎn)為度為1的結(jié)點(diǎn)算法描述int Level(BiTree bt) /層次遍歷二叉樹,并統(tǒng)計(jì)度為1的結(jié)點(diǎn)的個(gè)數(shù)int num=0; /num統(tǒng)計(jì)度為1的結(jié)點(diǎn)的個(gè)數(shù) if(bt)QueueInit(Q); QueueIn(Q,bt);/Q是以二叉樹結(jié)點(diǎn)指針為元素的隊(duì)列while(!QueueEmpty(Q)p=QueueOut(Q); coutdata; /出隊(duì),訪問結(jié)點(diǎn)if(p-lchild & !p-rchild |!p-lchild & p-rchild)num+;/度為1的結(jié)點(diǎn)if(p-lchild) QueueIn(Q,p-lchild); /非空左子女入隊(duì)if(p-rchild)
10、QueueIn(Q,p-rchild); /非空右子女入隊(duì) / while(!QueueEmpty(Q)/if(bt) return(num); /返回度為1的結(jié)點(diǎn)的個(gè)數(shù) (7)求任意二叉樹中第一條最長的路徑長度,并輸出此路徑上各結(jié)點(diǎn)的值。題目分析因?yàn)楹笮虮闅v棧中保留當(dāng)前結(jié)點(diǎn)的祖先的信息,用一變量保存棧的最高棧頂指針,每當(dāng)退棧時(shí),棧頂指針高于保存最高棧頂指針的值時(shí),則將該棧倒入輔助棧中,輔助棧始終保存最長路徑長度上的結(jié)點(diǎn),直至后序遍歷完畢,則輔助棧中內(nèi)容即為所求。算法描述void LongestPath(BiTree bt)/求二叉樹中的第一條最長路徑長度BiTree p=bt,l,s; /l
11、, s是棧,元素是二叉樹結(jié)點(diǎn)指針,l中保留當(dāng)前最長路徑中的結(jié)點(diǎn)int i,top=0,tag,longest=0;while(p | top0)while(p) s+top=p;tagtop=0; p=p-Lc; /沿左分枝向下if(tagtop=1) /當(dāng)前結(jié)點(diǎn)的右分枝已遍歷if(!stop-Lc & !stop-Rc) /只有到葉子結(jié)點(diǎn)時(shí),才查看路徑長度if(toplongest) for(i=1;i0) tagtop=1; p=stop.Rc; /沿右子分枝向下/while(p!=null|top0)/結(jié)束LongestPath(8)輸出二叉樹中從每個(gè)葉子結(jié)點(diǎn)到根結(jié)點(diǎn)的路徑。題目分析采用先序遍歷的遞歸方法,當(dāng)找到葉子結(jié)點(diǎn)*b時(shí),由于*b葉子結(jié)點(diǎn)尚未添加到path中,因此在輸出路徑時(shí)還需輸出b-data值。算法描述void AllPath(BTNode *b,ElemType path,int pathlen)int i; if (b!=NULL)if (b-lchild=NULL & b-rchild=NULL) /*b為葉子結(jié)點(diǎn)cout data 到根結(jié)點(diǎn)路徑: data;
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 車輛租賃行業(yè)風(fēng)險(xiǎn)評(píng)估承包合同
- 高科技園區(qū)廠房場地租賃合同范本
- 槽棎施工與地基處理合同
- 礦山采礦權(quán)抵押貸款與礦山運(yùn)營管理服務(wù)合同
- 叉車操作員健康管理與勞動(dòng)合同
- 商業(yè)店鋪?zhàn)赓U合同含裝修補(bǔ)貼
- 特色餐飲店鋪?zhàn)赓U與裝修合同
- 汽車維修服務(wù)公司車位租賃及轉(zhuǎn)讓合同
- 專業(yè)市場場地租賃押金及商品質(zhì)量管理責(zé)任書
- 化工品倉儲(chǔ)倉單質(zhì)押貸款合同模板
- LY/T 2071-2024人造板類產(chǎn)品生產(chǎn)綜合能耗
- 帶狀皰疹預(yù)防接種健康宣教
- 探究大象耳朵秘密:2025年課堂新視角
- 《咸寧市政府投資房屋建筑和市政基礎(chǔ)設(shè)施工程施工范本招標(biāo)文件》2021版
- 固定矯治器護(hù)理查房
- 招生就業(yè)處2025年工作計(jì)劃
- 市場營銷學(xué)練習(xí)及答案(吳健安)
- 脊柱健康與中醫(yī)養(yǎng)生課件
- 2024馬克思主義發(fā)展史第2版配套題庫里面包含考研真題課后習(xí)題和章節(jié)題庫
- 急救車藥品管理制度
- 2024年職業(yè)技能:拍賣師專業(yè)知識(shí)考試題與答案
評(píng)論
0/150
提交評(píng)論