二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx

二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx

ID:59621052

大?。?4.56 KB

頁(yè)數(shù):11頁(yè)

時(shí)間:2020-11-15

二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx_第1頁(yè)
二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx_第2頁(yè)
二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx_第3頁(yè)
二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx_第4頁(yè)
二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx_第5頁(yè)
資源描述:

《二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、【二叉樹的建立和遍歷實(shí)驗(yàn)報(bào)告】二叉樹的遍歷實(shí)驗(yàn)心得  [題目]建立二叉樹并求指定結(jié)點(diǎn)路徑、深度、葉子個(gè)數(shù)和左右子樹交換?! 問題描述]  要求能夠按先序遍歷次序輸入二叉樹中結(jié)點(diǎn)的值來(lái)構(gòu)造二叉樹T;然后用遞歸和非遞歸算法實(shí)現(xiàn)二叉樹T的中序遍歷;接著編寫算法實(shí)現(xiàn)求二叉樹T中指定結(jié)點(diǎn)的路徑,即從鍵盤輸入二叉樹T的任一結(jié)點(diǎn),可以輸出從根結(jié)點(diǎn)到該結(jié)點(diǎn)所經(jīng)歷的結(jié)點(diǎn);最后編寫二叉樹的三個(gè)應(yīng)用算法?! 基本要求]  分別建立二叉樹存儲(chǔ)結(jié)構(gòu)的輸入輸出函數(shù)、輸出中序遍歷函數(shù)、指定節(jié)點(diǎn)路徑函數(shù)、求深度函數(shù)、求葉子個(gè)數(shù)函數(shù)和將二叉樹左右子樹交換函數(shù)  一

2、、需求與規(guī)格說明  1、定義二叉樹的存儲(chǔ)結(jié)構(gòu),每個(gè)結(jié)點(diǎn)中設(shè)置三個(gè)域,即值域、左指針域、右指針域。要建立二叉樹T的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),即建立二叉鏈表。根據(jù)輸入二叉樹結(jié)點(diǎn)的形式不同,建立的方法也不同,本系統(tǒng)采用先序序列遞歸建立二叉樹,建立如下圖所示的二叉樹。應(yīng)該在程序運(yùn)行窗口的主控菜單后,先選擇“1”并回車,緊接著在程序運(yùn)行窗口中提示信息“輸入二叉樹的先序序列結(jié)點(diǎn)值:”之后,采用以下字符序列:abc@@de@g@@f@@@作為建立二叉樹T的輸入字符序列并回車,窗口出現(xiàn):二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)建立完成!  圖1二叉樹的圖形結(jié)構(gòu)  2、二叉樹的遍歷。

3、本系統(tǒng)采用非遞歸中序遍歷算法進(jìn)行中序遍歷,這意味著遍歷右子樹時(shí)不再需要保存當(dāng)前層的根指針,可直接修改棧頂記錄中的指針即可。需要在程序運(yùn)行窗口的主控菜單中選擇“2”并回車,程序運(yùn)行窗口會(huì)出現(xiàn)以下中序遍歷序列:  該二叉樹  的中序遍歷序列是:cbegdfa  3、求二叉樹的指定結(jié)點(diǎn)路徑。在程序運(yùn)行窗口的主控菜單中選擇“3”并回車,在程序運(yùn)行窗口中提示信息“輸入要求路徑的結(jié)點(diǎn)值:”輸入“g”并回車,會(huì)得到結(jié)果為:→a→b→d→e→g如果輸入“i”并回車,會(huì)得到結(jié)果為:沒有要求的結(jié)點(diǎn)!  4、求二叉樹的深度。在程序運(yùn)行窗口的主控菜單中選擇“

4、4”并回車,在會(huì)得到結(jié)果為:該二叉樹的深度為:5  5、求二叉樹的葉子結(jié)點(diǎn)個(gè)數(shù)。在程序運(yùn)行窗口的主控菜單中選擇“5”并回車,在會(huì)得到結(jié)果為:該二叉樹的葉子結(jié)點(diǎn)數(shù)為:3  6、將二叉樹左右子樹交換。在程序運(yùn)行窗口的主控菜單中選擇“6”并回車.得到結(jié)果為:該二叉樹的左右節(jié)點(diǎn)已交換成功,其中序遍歷序列是:afdgebc  7、退出程序。在程序運(yùn)行窗口的主控菜單中選擇“0”并回車。退出程序?! 《?、設(shè)計(jì)  1、設(shè)計(jì)思想  在二叉樹上無(wú)論采用哪種遍歷方法,都能夠訪問遍樹中的所有結(jié)點(diǎn)。由于訪問結(jié)點(diǎn)的順序不同,前序遍歷和中序遍歷都很難達(dá)到設(shè)計(jì)的要求

5、;但采用后序遍歷二叉樹是可行的,因?yàn)楹笮虮闅v是最后訪問根結(jié)點(diǎn),按這個(gè)順序?qū)⒃L問過的結(jié)點(diǎn)存儲(chǔ)到一個(gè)順序棧中,然后再輸出即可。因此,我們可以非遞歸地后序遍歷二叉樹T,當(dāng)后序遍歷訪問到結(jié)點(diǎn)*p時(shí),此時(shí)棧中存放的所有結(jié)點(diǎn)均為給定結(jié)點(diǎn)*p的祖先,而由這些祖先便構(gòu)成了一條從根結(jié)點(diǎn)到結(jié)點(diǎn)*p之間的路徑。而求二叉樹的深度和葉子結(jié)點(diǎn)數(shù)可以直接判斷結(jié)點(diǎn)孩子的數(shù)目來(lái)完成,將二叉樹的左右子樹交換也可以利用遞歸的方法,交換左右孩子來(lái)實(shí)現(xiàn)?! ?、設(shè)計(jì)表示  為實(shí)現(xiàn)上述的設(shè)計(jì)思想,首先要定義二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),我們采用二叉鏈表的方式,相應(yīng)的類型說明為:  ty

6、pedefcharDataType;  typedefstructnode{  DataTypedata;structnode*lchild,*rchild;  }BinTNode,*BinTree;  函數(shù)接口說明:  StatusCreateBiTree//1,按照先序遍歷次序遞歸建立二叉樹  StatusInorder//2,二叉樹非遞歸中序遍歷算法*/  BinTreeNodePath//3,求二叉樹根結(jié)點(diǎn)到給定結(jié)點(diǎn)*p的路徑intDepth//4.求二叉樹的深度  intLeaf//5.求二叉樹的葉子結(jié)點(diǎn)個(gè)數(shù)  BinTNo

7、de*huhuan//將p指針指向的二叉樹的左右子樹進(jìn)行互換  函數(shù)調(diào)用關(guān)系如圖所示:  三、實(shí)現(xiàn)注釋  二叉樹的創(chuàng)建模塊:按照先序遍歷次序遞歸建立二叉樹,通過讀入的字符,分配存儲(chǔ)空間生成新結(jié)點(diǎn)后再逐個(gè)構(gòu)建根結(jié)點(diǎn)、左子樹和右子樹。  二叉樹中序遍歷模塊:采用非遞歸中序遍歷算法,先逐步掃描二叉樹的左子樹,并壓入堆棧,如果棧不為空,左子樹為空,則彈出棧頂?shù)囊粋€(gè)元素并輸出。然后再掃描右子樹,然后再重復(fù)上面的步驟掃描該分支的左子樹,直至整棵二叉樹都掃描完成。此時(shí)輸出的序列便是該二叉樹的中序遍歷序列。語(yǔ)句注釋見代碼?! 《鏄渲付ńY(jié)點(diǎn)路徑模塊:

8、該模塊由NodePath、FindBT、Findx三個(gè)函數(shù)體構(gòu)成,main函數(shù)通過先調(diào)用Findx函數(shù)來(lái)查找結(jié)點(diǎn),F(xiàn)indx又通過逐步調(diào)用FindBT函數(shù)遍歷查找結(jié)點(diǎn)的路徑,最后main函數(shù)再通過調(diào)用NodePath函數(shù)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。