版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四節(jié)線索二叉樹一、線索二叉樹的概念1、定義n個結(jié)點的二叉鏈表中含有n+1個空指針域。利用二叉鏈表中的空指針域,存放指向結(jié)點在某種遍歷次序下的前趨和后繼結(jié)點的指針(這種附加的指針稱為"線索")。這種加上了線索的二叉鏈表稱為線索鏈表,相應(yīng)的二叉樹稱為線索二叉樹。根據(jù)線索性質(zhì)的不同,線索二叉樹可分為前序線索二叉樹、中序線索二叉樹和后序線索二叉樹三種。2、線索鏈表的結(jié)點結(jié)構(gòu)【例】如圖(a)所示的二叉樹所對應(yīng)的中序線索二叉樹如圖(b)所示,圖(c)所示為二叉線索鏈表樹。3、線索鏈表的結(jié)點類型定義typedefstructnode{DataTypedata;intltag,rtag;structnode*lchild,*rchild;}BinThrNode;//線索鏈表結(jié)點類型typedefBinThrNode*BinThrTree;//定義線索鏈表類型二、二叉樹線索化算法1、算法思想按某種次序遍歷二叉樹,在遍歷過程中用線索取代空指針即可.(1)如果根結(jié)點的左孩子指針域為空,則將左線索標志域置1,同時給根結(jié)點加左線索。(2)如果根結(jié)點的右孩子指針域為空,則將右線索標志域置l,同時給根結(jié)點加右線索。(3)將根結(jié)點指針賦給存放前趨結(jié)點指針的變量,以便當訪問下一個結(jié)點時,此根結(jié)點作為前趨結(jié)點。2、二叉鏈表加中序線索的算法算法與中序遍歷算法類似,只是將遍歷算法中訪問根結(jié)點*bt的操作改為在*bt和中序前趨*pre之間建立線索。voidInorderThread(BinThrTreebt){StaticBinThrNode*pre=NULL;//定義指向前趨結(jié)點的指針pre(靜態(tài)變量,只初始化1次),保存剛訪問過的結(jié)點if(bt!=NULL)//當二叉樹為空時結(jié)束遞歸{InorderThread(bt->lchild);//左子樹線索化if(bt->lchild==NULL)bt->ltag=l;elsebt->ltag=0;if(bt->rchild==NULL)bt->rtag=l;elsebt->rtag=0;if(pre){if(pre->rtag==1)pre->rchild=bt;//給前趨結(jié)點加后繼線索if(bt->ltag==1)bt->lchild=pre;//給當前結(jié)點加前趨線索}pre=bt;//將剛訪問過的當前結(jié)點置為前趨結(jié)點InorderThread(bt->rchild);//右子樹線索化}}三、二叉線索鏈表上的運算1、在中序線索二叉樹上查找某結(jié)點*p的后繼結(jié)點【分析】分兩種情況:(1)若結(jié)點*p的rtag域值為1,則表明p->rchild為右線索,它直接指向結(jié)點。(2)若結(jié)點*p的rtag域值為O,則表明p->rchild指向右孩子結(jié)點,結(jié)點*p的中序后繼結(jié)點必是其右子樹第一個中序遍歷到的結(jié)點,因此從結(jié)點*p的右孩子開始,沿左指針鏈向下查找,直到找到一個沒有左孩子(即ltag為1)的結(jié)點為止,該結(jié)點是結(jié)點*p的右子樹中"最左下"的結(jié)點,它就是結(jié)點*p的中序后繼結(jié)點。【算法描述】BinThrNode*InorderNext(BinThrNode*p){//在中序線索二叉樹上求結(jié)點*p的中序后繼結(jié)點if(p->rtag==1)//rchild域為右線索returnp->rchild;//返回中序后繼結(jié)點指針else{p=p->rchild;//從*p的右孩子開始while(p->ltag==O)p=p->lchild;//沿左指針鏈向下查找returnp;}}2、線索二叉樹的中序遍歷算法【基本思想】首先從根結(jié)點起沿左指針鏈向下查找,直到找到一個左線索標志為1的結(jié)點止,該結(jié)點的左指針域必為空,它就是整個中序序列中的第一個結(jié)點。訪問該結(jié)點,然后就可以依次找結(jié)點的后繼,直至中序后繼為空時為止。【算法描述】voidTinorderThrTree(BinThrThrtreebt){BinThrNode*p;if(bt!=NULL)//二叉樹不空{(diào)p=bt;//使p指向根結(jié)點while(p->ltag==O)//查找出中序遍歷的第一個結(jié)點p=p->lchild;do{printf("%c",p->data);//輸出訪問結(jié)點值p=InorderNext(p);//調(diào)用前面的函數(shù)查找結(jié)點*p的中序后繼}while(p!=NULL);//當p為空時算法結(jié)束}}當前講授【真題選解】(例題?單選題)下列所示各圖中是中序線索化二叉樹的是()A.B.C.D.
隱藏答案【答案】A【解析】選項A,b的前驅(qū)是NULL,后繼是a;c的前驅(qū)是a,后繼是空。所以遍歷順序為bac,可見,選項A是中序線索化二叉樹。選項B,b的前驅(qū)是a,后繼是c;c的前驅(qū)是b,
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合作聘請合同范例
- 承包電工合同范例
- 樁基維修合同范例范例
- 小區(qū)消防通道畫線施工方案
- 墊板銷售合同范例
- 廣州集資建房合同范例
- 渠道征地合同范例
- 南陽農(nóng)村建房合同范例
- 內(nèi)科練習(xí)題庫與答案
- 潛山租房合同范例
- 大學(xué)物理實驗智慧樹知到期末考試答案2024年
- 5G網(wǎng)絡(luò)安全風(fēng)險評估與緩解措施
- 2024年四川省普通高中學(xué)業(yè)水平考試(思想政治樣題)
- 中儲糧西安公司社會招聘試題
- 南呂一枝花不伏老課件
- 品質(zhì)部年終總結(jié)報告2022
- 康復(fù)科建設(shè)可行性方案及措施
- 華為手機行業(yè)洞察分析
- 蘇州市2023-2024學(xué)年高二上學(xué)期期末考試英語試卷(含答案)
- JGT366-2012 外墻保溫用錨栓
- 醫(yī)院網(wǎng)絡(luò)安全培訓(xùn)
評論
0/150
提交評論