![數(shù)據(jù)結(jié)構(gòu)-二叉樹(c++)_第1頁](http://file4.renrendoc.com/view/7fc1e7349a079c2105e6b1a74aecfa83/7fc1e7349a079c2105e6b1a74aecfa831.gif)
![數(shù)據(jù)結(jié)構(gòu)-二叉樹(c++)_第2頁](http://file4.renrendoc.com/view/7fc1e7349a079c2105e6b1a74aecfa83/7fc1e7349a079c2105e6b1a74aecfa832.gif)
![數(shù)據(jù)結(jié)構(gòu)-二叉樹(c++)_第3頁](http://file4.renrendoc.com/view/7fc1e7349a079c2105e6b1a74aecfa83/7fc1e7349a079c2105e6b1a74aecfa833.gif)
![數(shù)據(jù)結(jié)構(gòu)-二叉樹(c++)_第4頁](http://file4.renrendoc.com/view/7fc1e7349a079c2105e6b1a74aecfa83/7fc1e7349a079c2105e6b1a74aecfa834.gif)
![數(shù)據(jù)結(jié)構(gòu)-二叉樹(c++)_第5頁](http://file4.renrendoc.com/view/7fc1e7349a079c2105e6b1a74aecfa83/7fc1e7349a079c2105e6b1a74aecfa835.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++).數(shù)據(jù)結(jié)構(gòu)——二叉樹〔c++〕[摘要]現(xiàn)實(shí)社會中的樹——書籍的目錄、任務(wù)大綱、家族族譜之類等等。人們要研究就必須能過將樹正確的儲存,如何存儲又關(guān)系到實(shí)際的操作。樹是否為空,在本學(xué)期學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)的教材中允許樹為空[1]。因為樹表現(xiàn)形式的是一種現(xiàn)實(shí)的結(jié)構(gòu),而0不是自然數(shù)。從直觀上看樹是分支關(guān)系定義的層次結(jié)構(gòu),其中樹和二叉樹是最常見的[1]。[關(guān)鍵詞]數(shù)據(jù)結(jié)構(gòu);樹;二叉樹;遍歷;探討空間;1、二叉樹1.1二叉樹T是有限的結(jié)點(diǎn)的集合〔允許為空〕,或者由一個根結(jié)點(diǎn)u以與分別稱為左子樹和右子樹的兩棵互不相交的二叉樹u(1)和u(2)組成。若用n,n1和n2分別表示T,u(1)和u(2)的結(jié)點(diǎn)數(shù),則有n=1+n1+n2。u(1)和u(2)有時分別稱為T的第一和第二子樹。在二叉樹中,每個結(jié)點(diǎn)至多有兩個孩子,并且有左、右之分。因此任一結(jié)點(diǎn)的孩子不外4種情況:沒有孩子;只有一個左孩子;只有一個右孩子;有一個左孩子并且有一個右孩子。〔如圖1.1〕圖1.1五種基本形態(tài)〔其中□表示空〕1.2二叉樹與度數(shù)不超過2的樹不同,與度數(shù)不超過2的有序樹也不同。在有序樹中,雖然一個結(jié)點(diǎn)的孩子之間是有左右次序的,但若該結(jié)點(diǎn)只有一個孩子時,就無須區(qū)分其左右次序。而在二叉樹中,即使是一個孩子也有左右之分。圖1.2a〔不同的兩顆二叉樹〕圖1.2b〔普通的一棵樹〕數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第1頁。由圖可見:(a)和(b)是兩棵不同的二叉樹。雖然它們與普通數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第1頁。所以,二叉樹是一種人們假設(shè)的一種現(xiàn)象,所以允許為空是無爭議的。二叉樹是一種有序的樹,左邊是孩子、右邊是兄弟。其實(shí)可以看作不同的兩棵樹。做這個規(guī)定,正式因為人們要賦予給孩子兄弟不同的意義。通過這學(xué)期的學(xué)習(xí)發(fā)現(xiàn)了一個現(xiàn)象,就是樹并沒有插入刪除操作。對于非線性的樹結(jié)構(gòu),插入刪除操作不在一定的法則規(guī)定下,是毫無意義的。因此,只有在具體的應(yīng)用中,才會有插入刪除操作。2、特殊形態(tài)的二叉樹2.1滿二叉樹[1]:一棵高度為h≥0且有2h+1-1個結(jié)點(diǎn)的二叉樹稱為滿二叉樹?!踩鐖D3.1〕圖3.1〔滿二叉樹〕2.2完全二叉樹[1]:若一棵二叉樹至多只有最下面的兩層結(jié)點(diǎn)的度數(shù)小于2,并且最下面一層結(jié)點(diǎn)都集中在該層的最左邊,則稱這種二叉樹為完全二叉樹。〔如圖3.2〕圖3.2〔完全二叉樹〕3、二叉樹的遍歷以與實(shí)現(xiàn)〔c++〕3.1二叉樹基本上有先序遍歷、中序遍歷、后序遍歷,最開始并不明白為什么有這么多,到了后面才明白,這是不同的應(yīng)用需要的。例如,刪除二叉樹,必須先刪除左右子樹,然后才能刪除根節(jié)點(diǎn),這時就要用后序遍歷,而判斷兩個二叉樹是否相等,只要子樹根節(jié)點(diǎn)不同,那么就不等,顯然這時要用先序遍歷;數(shù)據(jù)結(jié)構(gòu)——二叉樹數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第2頁。public:voidPreOrder(void(*visit)(T&data)=print){PreOrder(root,visit);}private:voidPreOrder(BTNode*p,void(*visit)(T&data)){if(p){visit(p->data);PreOrder(p->left,visit);PreOrder(p->right,visit);}}3.1.2public:voidInOrder(void(*visit)(T&data)=print){InOrder(root,visit);}private:voidInOrder(BTNode*p,void(*visit)(T&data)){if(p){InOrder(p->left,visit);visit(p->data);InOrder(p->right,visit);}}3.1.3public:voidPostOrder(void(*visit)(T&data)=print){PostOrder(root,visit);}private:voidPostOrder(BTNode*p,void(*visit)(T&data)){if(p){PostOrder(p->left,visit);PostOrder(p->right,visit);visit(p->data);}}4、二叉樹的順序存儲結(jié)構(gòu)4.1在一棵具有n個結(jié)點(diǎn)的近似滿二叉樹中,我們從樹根起,自上到下,逐層從左到右給所有結(jié)點(diǎn)編號,就能得到一個足以反映整個二叉樹結(jié)構(gòu)的線性序列。所以,順序存儲結(jié)構(gòu)是二叉樹的一種特點(diǎn),按照一定的順序存儲在特定的連續(xù)單元中?!踩鐖D4.1〕數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第3頁。圖4.1〔完全二叉樹的結(jié)點(diǎn)編號〕我們將數(shù)組下標(biāo)作為結(jié)點(diǎn)編號,就可將二叉樹中所有結(jié)點(diǎn)的標(biāo)號存儲在一維數(shù)組中?!踩鐖D4.2〕圖4.2可以看到二叉樹的這種表示方式下,各結(jié)點(diǎn)之間的邏輯關(guān)系是隱含表示的。完全二叉樹中,除最下面一層外,各層都充滿了結(jié)點(diǎn)。除最底層外,每一層的結(jié)點(diǎn)個數(shù)恰好是上一層結(jié)點(diǎn)個數(shù)的2倍。因此,從一個結(jié)點(diǎn)的編號就可推知其父親,左孩子、右兄弟,等各結(jié)點(diǎn)的編號。假設(shè)對結(jié)點(diǎn)為i的二叉樹有如下定義:僅當(dāng)i=1時,結(jié)點(diǎn)i為根結(jié)點(diǎn);當(dāng)i>1時,結(jié)點(diǎn)i的父結(jié)點(diǎn)為[i/2];結(jié)點(diǎn)i的左孩子結(jié)點(diǎn)為2i;結(jié)點(diǎn)i的右孩子結(jié)點(diǎn)為2i+1;當(dāng)i為奇數(shù)且不為1時,結(jié)點(diǎn)i的左兄弟結(jié)點(diǎn)為i-1;當(dāng)i為偶數(shù)時,結(jié)點(diǎn)i的右兄弟結(jié)點(diǎn)為i+1。4.2但對于一般的二叉樹,采用順序存儲時,為了能用結(jié)點(diǎn)在數(shù)組中的位置來表示結(jié)點(diǎn)之間的邏輯關(guān)系,也必須按近似滿二叉樹的形式來存儲樹中的結(jié)點(diǎn)。一個只有k個結(jié)點(diǎn)的右單枝樹卻需要2k-1個結(jié)點(diǎn)的存儲空間。數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第4頁。假設(shè)結(jié)點(diǎn)為3的右單二叉樹,添上虛結(jié)點(diǎn)后,成為一棵近似滿二叉樹。〔如圖數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第4頁。圖4.3可知這樣造成的存儲空間的浪費(fèi)5、索化二叉樹5.1當(dāng)用二叉鏈表作為二叉樹的存儲結(jié)構(gòu)時,因為每個結(jié)點(diǎn)中只有指向其左、右孩子結(jié)點(diǎn)的指針,所以從任一結(jié)點(diǎn)出發(fā)只能直接找到該結(jié)點(diǎn)的左、右孩子。在一般情況下靠它無法直接找到該結(jié)點(diǎn)在某種遍歷序下的前驅(qū)和后繼結(jié)點(diǎn)。如果在每個結(jié)點(diǎn)中增加指向其前驅(qū)和后繼結(jié)點(diǎn)的指針,將降低存儲空間的效率。例:一棵中序線索二叉樹如〔圖5.1〕:圖5.1圖5.2〔線索鏈表〕數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第5頁。由圖數(shù)據(jù)結(jié)構(gòu)——二叉樹(c++)全文共6頁,當(dāng)前為第5頁。6、探討線索化二叉樹是否降低空間效率7.1線索化二叉樹提出的緣由:第一,二叉樹的葉子節(jié)點(diǎn)還有兩個指針域沒有用,可以節(jié)省內(nèi)存。第二,我們想用比較少的時間,尋找二叉樹某一個遍歷線性序列的前驅(qū)或者后繼。當(dāng)然,這樣的操作很頻繁的時候,做這方面的改善才是有意義的。7.2證明:求遍歷后的線性序列的前驅(qū)和后繼。先序線索化能依次找到后繼,但是前驅(qū)需要求雙親;中序線索化前驅(qū)和后繼都不需要求雙親,但是都不很直接;后序線索化能依次找到前驅(qū),但是后繼需要求雙親??梢钥闯?,線索化成中序是最佳的選擇,基本上算是達(dá)到了要求。節(jié)省內(nèi)存:線索化增加了兩個標(biāo)志位,但是這兩個位怎么儲存?即使是在支持位存儲的CPU上,也不能拿位存儲器來存的,第一是因為結(jié)構(gòu)體成員變量的內(nèi)存地址是在連續(xù)的一起的,第二是位存儲器的存儲數(shù)目是有限的。目前的計算機(jī)最少需要1個字節(jié)來儲存這兩個標(biāo)志位。而為了傳輸速度和內(nèi)存移植,大部分的內(nèi)存是要對齊的,這就導(dǎo)致在內(nèi)存中使用線索化二叉樹根本就沒節(jié)省內(nèi)存。假設(shè)把個內(nèi)存空間用來儲存雙親指針時,帶來的方便絕對不是線索化所能比擬的,前面已經(jīng)給出了無棧的非遞歸遍歷。并且,在線索化二叉樹上插入刪
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海南2025年國家糧食和物資儲備局海南儲備物資管理處招聘16人筆試歷年參考題庫附帶答案詳解
- 標(biāo)準(zhǔn)緊固件項目籌資方案
- 泰州2025年江蘇泰州職業(yè)技術(shù)學(xué)院口腔門診部招聘合同制口腔助理醫(yī)師筆試歷年參考題庫附帶答案詳解
- 河北河北省第三榮軍優(yōu)撫醫(yī)院選聘高層次退休人才3人筆試歷年參考題庫附帶答案詳解
- 昆明2025年云南昆明市五華區(qū)云銅中學(xué)合同制教師招聘筆試歷年參考題庫附帶答案詳解
- 2025年中國印染廢水特效脫色劑市場調(diào)查研究報告
- 廣州2025年廣東廣州市天河區(qū)瑜翠園幼兒園編外聘用制專任教師招聘筆試歷年參考題庫附帶答案詳解
- 2025年綠籬機(jī)齒輪項目可行性研究報告
- 2025年滴流樹脂項目可行性研究報告
- 2025年楓木實(shí)木地板項目可行性研究報告
- 2025年菏澤醫(yī)學(xué)??茖W(xué)校高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 成都四川成都簡陽市簡城街道便民服務(wù)和智慧蓉城運(yùn)行中心招聘綜治巡防隊員10人筆試歷年參考題庫附帶答案詳解
- 2025-2030全球廢棄食用油 (UCO) 轉(zhuǎn)化為可持續(xù)航空燃料 (SAF) 的催化劑行業(yè)調(diào)研及趨勢分析報告
- 山東省臨沂市蘭山區(qū)2024-2025學(xué)年七年級上學(xué)期期末考試生物試卷(含答案)
- 2025年環(huán)衛(wèi)工作計劃
- 湖北省武漢市2024-2025學(xué)年度高三元月調(diào)考英語試題(含答案無聽力音頻有聽力原文)
- 品質(zhì)巡檢培訓(xùn)課件
- 一年級下冊勞動《變色魚》課件
- 商務(wù)星球版地理八年級下冊全冊教案
- 天津市河西區(qū)2024-2025學(xué)年四年級(上)期末語文試卷(含答案)
- 2023青島版數(shù)學(xué)三年級下冊全冊教案
評論
0/150
提交評論