樹與二叉樹C課件_第1頁
樹與二叉樹C課件_第2頁
樹與二叉樹C課件_第3頁
樹與二叉樹C課件_第4頁
樹與二叉樹C課件_第5頁
已閱讀5頁,還剩99頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章樹與二叉樹(三樹與二叉樹C(精品)第6章樹與二叉樹(三本章的基本內(nèi)容是61樹及其抽象數(shù)據(jù)類型62二叉樹及其抽象數(shù)據(jù)類型63二叉樹的表示和實(shí)現(xiàn)64線索化二叉樹6.5樹、森林與二叉樹的轉(zhuǎn)換6.6哈夫曼編碼與哈夫曼樹構(gòu)造二叉樹建立一棵二查樹必須明確以下兩點(diǎn)(1)結(jié)點(diǎn)與父母結(jié)點(diǎn)以及孩子結(jié)點(diǎn)之間的層次關(guān)系(2)兄弟結(jié)點(diǎn)間的左右子樹的次序關(guān)系能夠唯一確定一棵二查樹的表示(1)先根和中根序列表示(2)標(biāo)明空子樹的先根序列表示第6章樹與二叉樹C(精品)第6章1本章的基本內(nèi)容是61樹及其抽象數(shù)據(jù)類型62二叉樹及其抽象數(shù)據(jù)類型63二叉樹的表示和實(shí)現(xiàn)64線索化二叉樹6.5樹、森林與二叉樹的轉(zhuǎn)換6.6哈夫曼編碼與哈夫曼樹本章的基本內(nèi)容是2構(gòu)造二叉樹建立一棵二查樹必須明確以下兩點(diǎn)(1)結(jié)點(diǎn)與父母結(jié)點(diǎn)以及孩子結(jié)點(diǎn)之間的層次關(guān)系(2)兄弟結(jié)點(diǎn)間的左右子樹的次序關(guān)系能夠唯一確定一棵二查樹的表示(1)先根和中根序列表示(2)標(biāo)明空子樹的先根序列表示構(gòu)造二叉樹31)先根和中根序列表示ii+先根序列BIDIGCEIFIHpreorder左子樹右子樹根左子樹右子樹n-1中根序列|DGB|A左子樹根右子樹(a)先根與中根次序遍歷序列(b)確定根、左子樹、右子樹1)先根和中根序列表示4在BinaryTree類中增加以下構(gòu)造方法publicBinaryTree(Tlprelist,Tlinlist)Ithisroot=create(prelist,inlist,0,0,prelistlength);privateBinaryNodecreate(TDprelist,T[inlist,intpreStart,intinStart,intnif(n<=0)returnnul;Telem=prelist[preStart];BinaryNode<T>p=newBinaryNode<T>(elem);inti=Owhile(i<n&&!elem.equals(inlist[inStart+))1++pleft=create(prelist,inlist,preStart+1,instart,i)pright=create(prelist,inlist,preStart+i+1,instart+i+1,n-1-1)returnp在BinaryTree類中增加以下構(gòu)造方法5(2)標(biāo)明空子樹的先根序列表示(a)AB(b)AB(c)AB..c(d)ABd.g.ce.FH(2)標(biāo)明空子樹的先根序列表示6在BinaryTree類中增加以下構(gòu)造方法publicBinaryTree(T[prelist)Ithisroot=creatprelist);1privateinti=OprivateBinarynode<T>create(TIprelist)(BinaryNode<T>p=null;(i<prelistlength[Telem=prelist[]+if(elem!=nullip=newBinaryNode<t>(elem);pleft=create(prelistpright=create(prelist)returnp在BinaryTree類中增加以下構(gòu)造方法7如何獲得結(jié)點(diǎn)在一種遍歷序列中的前驅(qū)或后繼?leftdataright∧H人(a)一棵二叉樹(b)二叉鏈表如何獲得結(jié)點(diǎn)在一種遍歷序列中的前驅(qū)或864線索化二叉樹(ThreadedBinarytree)用二叉鏈表法(Child,rchild)存儲(chǔ)包含n個(gè)結(jié)點(diǎn)的二叉樹,結(jié)點(diǎn)的指針區(qū)域中會(huì)有多少個(gè)空指針?分析:用二叉鏈表存儲(chǔ)包含n個(gè)結(jié)點(diǎn)的二叉樹,結(jié)點(diǎn)必有2n個(gè)鏈域除根結(jié)點(diǎn)外,二又樹中每一個(gè)結(jié)點(diǎn)有且僅有一個(gè)雙親(直接前驅(qū)),所以只會(huì)有n-1個(gè)結(jié)點(diǎn)的鏈域存放指針,指向非空子女結(jié)點(diǎn)所以,空指針數(shù)目=2n-(n-1)=n+1個(gè)64線索化二叉樹(ThreadedBinarytree9②二叉鏈表空間效率這么低,能否利用這些空閑區(qū)存放有用的信息或線索?可以用它來存放當(dāng)前結(jié)點(diǎn)的直接前驅(qū)和后繼等線索,以加快查找速度問題的提出:普通二叉樹只能找到結(jié)點(diǎn)的左右孩子信息,而該結(jié)點(diǎn)的直接前驅(qū)和直接后繼只能在遍歷過程中獲得若將遍歷后對(duì)應(yīng)的有關(guān)前驅(qū)和后繼預(yù)存起來,則從第一個(gè)結(jié)點(diǎn)開始就能很快“順藤摸瓜”而遍歷整個(gè)樹可能是根、或最左(右)葉子②二叉鏈表空間效率這么低,能否利用這些空閑區(qū)10樹與二叉樹C課件11樹與二叉樹C課件12樹與二叉樹C課件13樹與二叉樹C課件14樹與二叉樹C課件15樹與二叉樹C課件16樹與二叉樹C課件17樹與二叉樹C課件18樹與二叉樹C課件19樹與二叉樹C課件20樹與二叉樹C課件21樹與二叉樹C課件22樹與二叉樹C課件23樹與二叉樹C課件24樹與二叉樹C課件25樹與二叉樹C課件26樹與二叉樹C課件27樹與二叉樹C課件28樹與二叉樹C課件29樹與二叉樹C課件30樹與二叉樹C課件31樹與二叉樹C課件32樹與二叉樹C課件33樹與二叉樹C課件34樹與二叉樹C課件35樹與二叉樹C課件36樹與二叉樹C課件37樹與二叉樹C課件38樹與二叉樹C課件39樹與二叉樹C課件40樹與二叉樹C課件41樹與二叉樹C課件42樹與二叉樹C課件43樹與二叉樹C課件44樹與二叉樹C課件45樹與二叉樹C課件46樹與二叉樹C課件47樹與二叉樹C課件48樹與二叉樹C課件49樹與二叉樹C課件50樹與二叉樹C課件51樹與二叉樹C課件52第6章樹與二叉樹(三樹與二叉樹C(精品)第6章樹與二叉樹(三本章的基本內(nèi)容是61樹及其抽象數(shù)據(jù)類型62二叉樹及其抽象數(shù)據(jù)類型63二叉樹的表示和實(shí)現(xiàn)64線索化二叉樹6.5樹、森林與二叉樹的轉(zhuǎn)換6.6哈夫曼編碼與哈夫曼樹構(gòu)造二叉樹建立一棵二查樹必須明確以下兩點(diǎn)(1)結(jié)點(diǎn)與父母結(jié)點(diǎn)以及孩子結(jié)點(diǎn)之間的層次關(guān)系(2)兄弟結(jié)點(diǎn)間的左右子樹的次序關(guān)系能夠唯一確定一棵二查樹的表示(1)先根和中根序列表示(2)標(biāo)明空子樹的先根序列表示第6章樹與二叉樹C(精品)第6章53本章的基本內(nèi)容是61樹及其抽象數(shù)據(jù)類型62二叉樹及其抽象數(shù)據(jù)類型63二叉樹的表示和實(shí)現(xiàn)64線索化二叉樹6.5樹、森林與二叉樹的轉(zhuǎn)換6.6哈夫曼編碼與哈夫曼樹本章的基本內(nèi)容是54構(gòu)造二叉樹建立一棵二查樹必須明確以下兩點(diǎn)(1)結(jié)點(diǎn)與父母結(jié)點(diǎn)以及孩子結(jié)點(diǎn)之間的層次關(guān)系(2)兄弟結(jié)點(diǎn)間的左右子樹的次序關(guān)系能夠唯一確定一棵二查樹的表示(1)先根和中根序列表示(2)標(biāo)明空子樹的先根序列表示構(gòu)造二叉樹551)先根和中根序列表示ii+先根序列BIDIGCEIFIHpreorder左子樹右子樹根左子樹右子樹n-1中根序列|DGB|A左子樹根右子樹(a)先根與中根次序遍歷序列(b)確定根、左子樹、右子樹1)先根和中根序列表示56在BinaryTree類中增加以下構(gòu)造方法publicBinaryTree(Tlprelist,Tlinlist)Ithisroot=create(prelist,inlist,0,0,prelistlength);privateBinaryNodecreate(TDprelist,T[inlist,intpreStart,intinStart,intnif(n<=0)returnnul;Telem=prelist[preStart];BinaryNode<T>p=newBinaryNode<T>(elem);inti=Owhile(i<n&&!elem.equals(inlist[inStart+))1++pleft=create(prelist,inlist,preStart+1,instart,i)pright=create(prelist,inlist,preStart+i+1,instart+i+1,n-1-1)returnp在BinaryTree類中增加以下構(gòu)造方法57(2)標(biāo)明空子樹的先根序列表示(a)AB(b)AB(c)AB..c(d)ABd.g.ce.FH(2)標(biāo)明空子樹的先根序列表示58在BinaryTree類中增加以下構(gòu)造方法publicBinaryTree(T[prelist)Ithisroot=creatprelist);1privateinti=OprivateBinarynode<T>create(TIprelist)(BinaryNode<T>p=null;(i<prelistlength[Telem=prelist[]+if(elem!=nullip=newBinaryNode<t>(elem);pleft=create(prelistpright=create(prelist)returnp在BinaryTree類中增加以下構(gòu)造方法59如何獲得結(jié)點(diǎn)在一種遍歷序列中的前驅(qū)或后繼?leftdataright∧H人(a)一棵二叉樹(b)二叉鏈表如何獲得結(jié)點(diǎn)在一種遍歷序列中的前驅(qū)或6064線索化二叉樹(ThreadedBinarytree)用二叉鏈表法(Child,rchild)存儲(chǔ)包含n個(gè)結(jié)點(diǎn)的二叉樹,結(jié)點(diǎn)的指針區(qū)域中會(huì)有多少個(gè)空指針?分析:用二叉鏈表存儲(chǔ)包含n個(gè)結(jié)點(diǎn)的二叉樹,結(jié)點(diǎn)必有2n個(gè)鏈域除根結(jié)點(diǎn)外,二又樹中每一個(gè)結(jié)點(diǎn)有且僅有一個(gè)雙親(直接前驅(qū)),所以只會(huì)有n-1個(gè)結(jié)點(diǎn)的鏈域存放指針,指向非空子女結(jié)點(diǎn)所以,空指針數(shù)目=2n-(n-1)=n+1個(gè)64線索化二叉樹(ThreadedBinarytree61②二叉鏈表空間效率這么低,能否利用這些空閑區(qū)存放有用的信息或線索?可以用它來存放當(dāng)前結(jié)點(diǎn)的直接前驅(qū)和后繼等線索,以加快查找速度問題的提出:普通二叉樹只能找到結(jié)點(diǎn)的左右孩子信息,而該結(jié)點(diǎn)的直接前驅(qū)和直接后繼只能在遍歷過程中獲得若將遍歷后對(duì)應(yīng)的有關(guān)前驅(qū)和后繼預(yù)存起來,則從第一個(gè)結(jié)點(diǎn)開始就能很快“順藤摸瓜”而遍歷整個(gè)樹可能是根、或最左(右)葉子②二叉鏈表空間效率這么低,能否利用這些空閑區(qū)62樹與二叉樹C課件63樹與二叉樹C課件64樹與二叉樹C課件65樹與二叉樹C課件66樹與二叉樹C課件67樹與二叉樹C課件68樹與二叉樹C課件69樹與二叉樹C課件70樹與二叉樹C課件71樹與二叉樹C課件72樹與二叉樹C課件73樹與二叉樹C課件74樹與二叉樹C課件75樹與二叉樹C課件76樹與二叉樹C課件77樹與二叉樹C課件78樹與二叉樹C課件79樹與二叉樹C課件80樹與二叉樹C課件81樹與二叉樹C課件82樹與二叉樹C課件83樹與二叉

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論