![據(jù)結(jié)構(gòu)二叉樹(shù)的線索化_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/ef9e3ffd-dba1-46f9-aba8-f781281e979c/ef9e3ffd-dba1-46f9-aba8-f781281e979c1.gif)
![據(jù)結(jié)構(gòu)二叉樹(shù)的線索化_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/ef9e3ffd-dba1-46f9-aba8-f781281e979c/ef9e3ffd-dba1-46f9-aba8-f781281e979c2.gif)
![據(jù)結(jié)構(gòu)二叉樹(shù)的線索化_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/ef9e3ffd-dba1-46f9-aba8-f781281e979c/ef9e3ffd-dba1-46f9-aba8-f781281e979c3.gif)
![據(jù)結(jié)構(gòu)二叉樹(shù)的線索化_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/ef9e3ffd-dba1-46f9-aba8-f781281e979c/ef9e3ffd-dba1-46f9-aba8-f781281e979c4.gif)
![據(jù)結(jié)構(gòu)二叉樹(shù)的線索化_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/ef9e3ffd-dba1-46f9-aba8-f781281e979c/ef9e3ffd-dba1-46f9-aba8-f781281e979c5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、6.1 6.1 樹(shù)的定義和基本術(shù)語(yǔ)樹(shù)的定義和基本術(shù)語(yǔ)6.2 6.2 二叉二叉樹(shù)樹(shù)6.3 6.3 遍歷二叉樹(shù)和線索二叉樹(shù)遍歷二叉樹(shù)和線索二叉樹(shù)6.4 6.4 樹(shù)和森林樹(shù)和森林6.6 6.6 哈夫曼樹(shù)及其應(yīng)用哈夫曼樹(shù)及其應(yīng)用第六章第六章 樹(shù)和二叉樹(shù)樹(shù)和二叉樹(shù) 何謂線索二叉樹(shù)?何謂線索二叉樹(shù)? 線索鏈表的遍歷算法線索鏈表的遍歷算法 如何建立線索鏈表?如何建立線索鏈表?6.3.2 二叉樹(shù)的線索化二叉樹(shù)的線索化6.3 6.3 遍歷二叉樹(shù)和線索二叉樹(shù)遍歷二叉樹(shù)和線索二叉樹(shù)一、一、何謂線索二叉樹(shù)?何謂線索二叉樹(shù)?遍歷二叉樹(shù)的結(jié)果是, 求得結(jié)點(diǎn)的一個(gè)線性序列。abcdefghk例如:先序先序序列: a b c
2、 d e f g h k中序中序序列: b d c a h g k f e后序后序序列: d c b h k g f e a指向該線性序列中的“前驅(qū)”和 “后繼” 的指針指針,稱作“線線索索”與其相應(yīng)的二叉樹(shù),稱作 “線索二叉樹(shù)線索二叉樹(shù)”包含 “線索” 的存儲(chǔ)結(jié)構(gòu),稱作 “線索鏈線索鏈表表”a b c d e f g h k d c b e 對(duì)對(duì)線索鏈表線索鏈表中結(jié)點(diǎn)的約定:中結(jié)點(diǎn)的約定: 在二叉鏈表的結(jié)點(diǎn)中增加兩個(gè)標(biāo)志域增加兩個(gè)標(biāo)志域,并作如下規(guī)定:若該結(jié)點(diǎn)的左子樹(shù)不空,若該結(jié)點(diǎn)的左子樹(shù)不空,則lchild域的指針指向其左子樹(shù), 且左標(biāo)志域的值為“指針 link”; 否則,lchild域的
3、指針指向其“前驅(qū)”, 且左標(biāo)志的值為“線索 thread” 。若該結(jié)點(diǎn)的右子樹(shù)不空,若該結(jié)點(diǎn)的右子樹(shù)不空,則rchild域的指針指向其右子樹(shù), 且右標(biāo)志域的值為 “指針 link”;否則,rchild域的指針指向其“后繼”, 且右標(biāo)志的值為“線索 thread”。 如此定義的二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)稱作如此定義的二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)稱作“線索鏈表線索鏈表”6.3.2 二叉樹(shù)的線索化二叉樹(shù)的線索化 當(dāng)以二叉鏈表作為存儲(chǔ)結(jié)構(gòu)時(shí),只能找到結(jié)點(diǎn)的左、右孩子信息,而不能直當(dāng)以二叉鏈表作為存儲(chǔ)結(jié)構(gòu)時(shí),只能找到結(jié)點(diǎn)的左、右孩子信息,而不能直接得到結(jié)點(diǎn)在任一序列(先序、中序或后序序列)中的前驅(qū)和后繼信息,這種接得到結(jié)點(diǎn)在
4、任一序列(先序、中序或后序序列)中的前驅(qū)和后繼信息,這種信息只有在遍歷的動(dòng)態(tài)過(guò)程中才能得到。為了保存這種在遍歷過(guò)程中得到的信信息只有在遍歷的動(dòng)態(tài)過(guò)程中才能得到。為了保存這種在遍歷過(guò)程中得到的信息,我們利用二叉鏈表中的空鏈域(由于結(jié)點(diǎn)沒(méi)有左子樹(shù)或右子樹(shù)),來(lái)存放息,我們利用二叉鏈表中的空鏈域(由于結(jié)點(diǎn)沒(méi)有左子樹(shù)或右子樹(shù)),來(lái)存放結(jié)點(diǎn)的前驅(qū)和后繼信息。結(jié)點(diǎn)的前驅(qū)和后繼信息。作如下規(guī)定:作如下規(guī)定: 若結(jié)點(diǎn)有左子樹(shù),則其若結(jié)點(diǎn)有左子樹(shù),則其lchild域指示其左孩子,否則令域指示其左孩子,否則令lchild域指示其前驅(qū);域指示其前驅(qū); 若結(jié)點(diǎn)有右子樹(shù),則其若結(jié)點(diǎn)有右子樹(shù),則其rchild域指示其右孩
5、子,否則令域指示其右孩子,否則令rchild域指示其后繼。域指示其后繼。 (1)線索鏈表的結(jié)點(diǎn)結(jié)構(gòu))線索鏈表的結(jié)點(diǎn)結(jié)構(gòu)lchild ltag data rtag rchild其中:其中:data:數(shù)據(jù)域;:數(shù)據(jù)域; lchild:左指針域,指向該結(jié)點(diǎn)的左孩子;:左指針域,指向該結(jié)點(diǎn)的左孩子; rchild:右指針域,指向該結(jié)點(diǎn)的右孩子;:右指針域,指向該結(jié)點(diǎn)的右孩子; 0 lchild域指示結(jié)點(diǎn)的左孩子域指示結(jié)點(diǎn)的左孩子 ltag = 1 lchild域指示結(jié)點(diǎn)的前驅(qū)域指示結(jié)點(diǎn)的前驅(qū) 0 rchild域指示結(jié)點(diǎn)的右孩子域指示結(jié)點(diǎn)的右孩子 rtag = 1 rchild域指示結(jié)點(diǎn)的后繼域指示結(jié)點(diǎn)
6、的后繼(2)線索鏈表的定義)線索鏈表的定義 線索鏈表線索鏈表:以上述結(jié)點(diǎn)結(jié)構(gòu)構(gòu)成的二叉鏈表作為二叉樹(shù)的存儲(chǔ)結(jié)構(gòu),稱之:以上述結(jié)點(diǎn)結(jié)構(gòu)構(gòu)成的二叉鏈表作為二叉樹(shù)的存儲(chǔ)結(jié)構(gòu),稱之為線索鏈表。為線索鏈表。(3)相關(guān)術(shù)語(yǔ))相關(guān)術(shù)語(yǔ)線索化線索化:對(duì)二叉樹(shù)以某種次序遍歷使其變?yōu)榫€性二叉樹(shù)的過(guò)程。:對(duì)二叉樹(shù)以某種次序遍歷使其變?yōu)榫€性二叉樹(shù)的過(guò)程。線索二叉樹(shù)(線索二叉樹(shù)(threaded binary tree):加上線索的二叉樹(shù)。:加上線索的二叉樹(shù)。線索線索:在線索鏈表中指向結(jié)點(diǎn)前驅(qū)和后繼的指針。:在線索鏈表中指向結(jié)點(diǎn)前驅(qū)和后繼的指針。(4)圖形表示)圖形表示-+ /a * e fb -c d-+ /nil
7、nila * e fb -c d(a) ( a + b * (cd)e / f )表達(dá)式的二叉樹(shù)表達(dá)式的二叉樹(shù)(b) 中序線索二叉樹(shù)中序線索二叉樹(shù)圖圖6.11線索二叉樹(shù)及其存儲(chǔ)結(jié)構(gòu)線索二叉樹(shù)及其存儲(chǔ)結(jié)構(gòu)thrt 0 1bt0 0 0 0 0 / 0 1 a 1 0 * 0 1 e 1 1 f 10 01 b 11 c 11 d 1(c) 中序線索鏈表中序線索鏈表圖中,實(shí)線為指針(指向左、右子樹(shù)),虛線為線索(指向前驅(qū)和后繼)。圖中,實(shí)線為指針(指向左、右子樹(shù)),虛線為線索(指向前驅(qū)和后繼)。typedef struct bithrnod telemtype data; struct bithr
8、node *lchild, *rchild; / 左右指針 pointerthr ltag, rtag; / 左右標(biāo)志 bithrnode, *bithrtree;線索鏈表的類型描述: typedef enum link, thread pointerthr; / link=0:指針,thread=1:線索二、線索鏈表的遍歷算法二、線索鏈表的遍歷算法: for ( p = firstnode(t); p; p = succ(p) ) visit (p);由于在線索鏈表中添加了遍歷中得到的“前驅(qū)”和“后繼”的信息,從而簡(jiǎn)化了遍歷的算法。例如例如: 對(duì)中序線索化鏈表的遍歷算法對(duì)中序線索化鏈表的遍歷
9、算法 中序遍歷的第一個(gè)結(jié)點(diǎn)中序遍歷的第一個(gè)結(jié)點(diǎn) ? 在中序線索化鏈表中結(jié)點(diǎn)的后繼在中序線索化鏈表中結(jié)點(diǎn)的后繼 ?左子樹(shù)上處于“最左下最左下”(沒(méi)有左子樹(shù))的結(jié)點(diǎn)若若無(wú)右子樹(shù),則為則為后繼線索后繼線索所指結(jié)點(diǎn)否則為否則為對(duì)其右子樹(shù)右子樹(shù)進(jìn)行中序遍歷遍歷時(shí)訪問(wèn)的第一個(gè)結(jié)點(diǎn)第一個(gè)結(jié)點(diǎn)void inordertraverse_thr(bithrtree t, void (*visit)(telemtype e) /t指向結(jié)點(diǎn),頭結(jié)點(diǎn)的左鏈lchild指向根結(jié)點(diǎn),可參照線索化算法。/中序遍歷二叉線索樹(shù)t的非遞歸算法,對(duì)每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit p = t-lchild; / p指向根結(jié)點(diǎn) whil
10、e (p != t) / 空樹(shù)或遍歷結(jié)束時(shí),p=t while (p-ltag=link) p = p-lchild; / 第一個(gè)結(jié)點(diǎn) if (!visit(p-data) return error;/訪問(wèn)其左子樹(shù)為空的結(jié)點(diǎn) while (p-rtag=thread & p-rchild!=t) p = p-rchild; visit(p-data); / 訪問(wèn)后繼結(jié)點(diǎn) p = p-rchild; / p進(jìn)至其右子樹(shù)根 / inordertraverse_thr 在中序遍歷過(guò)程中修改結(jié)點(diǎn)的在中序遍歷過(guò)程中修改結(jié)點(diǎn)的左、右指針域,以保存當(dāng)前訪問(wèn)結(jié)左、右指針域,以保存當(dāng)前訪問(wèn)結(jié)點(diǎn)的點(diǎn)的“前
11、驅(qū)前驅(qū)”和和“后繼后繼”信息。遍歷過(guò)信息。遍歷過(guò)程中,附設(shè)指針程中,附設(shè)指針pre, 并始終保持指并始終保持指針針pre指向當(dāng)前訪問(wèn)的、指針指向當(dāng)前訪問(wèn)的、指針p所指所指結(jié)點(diǎn)的前驅(qū)。結(jié)點(diǎn)的前驅(qū)。三、如何建立線索鏈表?三、如何建立線索鏈表?void inthreading(bithrtree p) if (p) / 對(duì)以p為根的非空二叉樹(shù)進(jìn)行線索化 inthreading(p-lchild); / 左子樹(shù)線索化 if (!p-lchild) / 建前驅(qū)線索 p-ltag = thread; p-lchild = pre; if (!pre-rchild) / 建后繼線索 pre-rtag = thread; pre-rchild = p; pre = p; / 保持 pre 指向 p 的前驅(qū) inthreading(p-rchild); / 右子樹(shù)線索化 / if / inthreadingstatus inorderthreading(bithrtree &thrt, bithrtree t) / 構(gòu)建中序線索鏈表 if (!(thrt = new bithrnode) ) exit (overflow); thrt-ltag = link; thrt-rtag =thread; thrt-rchild = th
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)背景音樂(lè)廣播語(yǔ)音系統(tǒng)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年電渦流緩速器控制器項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)熱熔膠噴槍行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)帶燈熒光筆行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年對(duì)焊加強(qiáng)管座項(xiàng)目可行性研究報(bào)告
- 2025年臺(tái)式移印打碼機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年八針鏈?zhǔn)娇p紉機(jī)項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國(guó)面粉機(jī)磨輥數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年速溶乳化輕質(zhì)硅酸鈉項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年納豆激酶項(xiàng)目投資價(jià)值分析報(bào)告
- 配套課件-前廳客房服務(wù)與管理
- 工業(yè)和信息化部裝備工業(yè)發(fā)展中心2025年上半年應(yīng)屆畢業(yè)生招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 重慶市2024-2025學(xué)年高一上學(xué)期期末聯(lián)考生物試卷(含答案)
- 2025安全生產(chǎn)工作目標(biāo)及實(shí)施計(jì)劃
- 《高原紅細(xì)胞增多癥血液稀釋療法護(hù)理操作規(guī)程》
- 應(yīng)急處置洗消
- 年終抖音運(yùn)營(yíng)述職報(bào)告
- 【課件】如何保障我國(guó)未來(lái)的能源安全
- 結(jié)腸術(shù)后恢復(fù)護(hù)理
- 汽車(chē)維修店加盟協(xié)議書(shū)細(xì)則
- 2024東莞市勞動(dòng)局制定的勞動(dòng)合同范本
評(píng)論
0/150
提交評(píng)論