線索二叉樹(shù)

今天刷題的時(shí)候發(fā)現(xiàn)結(jié)構(gòu)算法1800上的題關(guān)于線索二叉樹(shù)的沒(méi)有考很深,但是如果對(duì)整個(gè)基礎(chǔ)算法沒(méi)有很好地把握的話做題還是有幾個(gè)點(diǎn)有點(diǎn)疑惑,于是把整個(gè)完整線索化整理了一下刹衫,包括前中后序的差別,以中序?yàn)槔ó吘惯f歸只是換換執(zhí)行順序)脾歧,把過(guò)程整個(gè)推了一遍終于把遞歸的邏輯理通了讨便。

線索化的本質(zhì)是把非線性結(jié)構(gòu)變成線性結(jié)構(gòu)充甚,利用二叉鏈表的空鏈域存放指向直接前驅(qū)和后繼的指針。
熟悉了這個(gè)結(jié)構(gòu)以后解決對(duì)應(yīng)得問(wèn)題也變得很輕松了
幾個(gè)經(jīng)典問(wèn)題:關(guān)于某結(jié)點(diǎn)的前驅(qū)后繼問(wèn)題霸褒,空的鏈域有幾個(gè)伴找,線索數(shù),類似后序非遞歸遍歷的废菱,后序線索樹(shù)的遍歷仍需要棧的支持技矮,聯(lián)考還考過(guò)符合后續(xù)線索樹(shù)定義的圖像,如果對(duì)過(guò)程很熟悉可以用來(lái)驗(yàn)證答案殊轴。

需要注意的是后序線索二叉樹(shù)不能有效解決求后續(xù)后繼的問(wèn)題衰倦,仍應(yīng)按常規(guī)辦法尋找。

存儲(chǔ)結(jié)構(gòu)

typedef struct ThreadNode{
        int data;//數(shù)據(jù)
        struct ThreadNode *lchild,rchild;
        int ltag, rtag;
}ThreadNode, *ThreadTree;

其中引入了標(biāo)志域:
Ltag 為0表示lchild域指向左孩子
Ltag 為1表示lchild域指向直接前驅(qū)
Rtag 為0表示rchild域指向右孩子
Rtag 為1表示rchild域指向直接后繼

void InThread(ThreadTree &p, ThreadTree &pre)
{
        //inorder so we start from left tree :)
        if(p!=NULL)
        {
            InThread(p->lchild, pre);
            //when first iterator pre =null
            if(p->lchild == NULL){
                p->lchild = pre;
                p->ltag = 1;
            }
            if(pre!=NULL && pre->rchild == NULL){
                pre->rchild = p;
                pre->rtag = 1;
            }
            pre = p;
            InThread(p->rchild, pre);
            //Then we finished right side
        }
        
}

遞歸的算法看起來(lái)很簡(jiǎn)單但是如果真的走一遍還是會(huì)發(fā)現(xiàn)很多問(wèn)題的旁理,所以畫了個(gè)圖


初始狀態(tài)

讓我們進(jìn)入第一次迭代樊零,遞歸的執(zhí)行左移的操作,此時(shí)pre始終為空孽文,終于我們來(lái)到了最左邊的結(jié)點(diǎn)~
最左結(jié)點(diǎn)的lchild肯定為空啦驻襟,所以將他的前驅(qū)lchild設(shè)為pre,但此時(shí)pre為NULL芋哭,于是lchild域置空塑悼,ltag為1,標(biāo)記它是一條線索楷掉。


IMG_8778.JPG

IMG_8773.JPG

而此時(shí)pre為NULL跳過(guò)第二段判定厢蒜,令pre = p

進(jìn)入當(dāng)前循環(huán)的右子樹(shù)部分,p右移到最右烹植,此時(shí)的p左子樹(shù)為空斑鸦,pre指向我們剛才搞完的B結(jié)點(diǎn),所以把p的直接前驅(qū)=pre所指結(jié)點(diǎn)草雕,pre !=null 但 pre的rchild != null所以pre 指向 D結(jié)點(diǎn) 結(jié)束


IMG_8774.JPG

此時(shí)第一次迭代中的第一條語(yǔ)句才執(zhí)行完巷屿,p仍指向root
其lchild不為空,但此時(shí)pre墩虹!=null && pre->rchild == null了
于是我們將pre所指向結(jié)點(diǎn)的rchild指向當(dāng)前的p嘱巾,
繼續(xù)pre = p,并開(kāi)始遞歸線索化右子樹(shù)诫钓!
IMG_8775.JPG

p右移到最右結(jié)點(diǎn)(這圖好簡(jiǎn)單)旬昭,先進(jìn)入到他的最左結(jié)點(diǎn),此時(shí)pre仍在根節(jié)點(diǎn)哦菌湃,因?yàn)楫?dāng)前結(jié)點(diǎn)沒(méi)有l(wèi)child问拘,所以前驅(qū)設(shè)為pre指向結(jié)點(diǎn),即根節(jié)點(diǎn),然后pre就可以名正言順的指向E結(jié)點(diǎn)了
此時(shí)C結(jié)點(diǎn)的左子樹(shù)結(jié)束
IMG_8776.JPG

lchild不為空跳過(guò)骤坐,此時(shí)pre绪杏!=null && rchild == null,pre->rchild = p; pre 指向C結(jié)點(diǎn)纽绍,因?yàn)镃無(wú)右子樹(shù)蕾久,這個(gè)時(shí)候A結(jié)點(diǎn)的右子樹(shù)也結(jié)束了。


IMG_8777.JPG

再執(zhí)行完整個(gè)InThread之后拌夏,我們應(yīng)把pre指向結(jié)點(diǎn)的后繼置空腔彰,表示整個(gè)線索的結(jié)束。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辖佣,一起剝皮案震驚了整個(gè)濱河市霹抛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卷谈,老刑警劉巖杯拐,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異世蔗,居然都是意外死亡端逼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門污淋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)顶滩,“玉大人,你說(shuō)我怎么就攤上這事寸爆〗嘎常” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵赁豆,是天一觀的道長(zhǎng)仅醇。 經(jīng)常有香客問(wèn)我,道長(zhǎng)魔种,這世上最難降的妖魔是什么析二? 我笑而不...
    開(kāi)封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮节预,結(jié)果婚禮上叶摄,老公的妹妹穿的比我還像新娘。我一直安慰自己安拟,他們只是感情好蛤吓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著柱衔,像睡著了一般唆铐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奔滑,一...
    開(kāi)封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼氓辣。 笑死钞啸,一個(gè)胖子當(dāng)著我的面吹牛体斩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹬敲,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼闹究,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渣淤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起渠退,我...
    開(kāi)封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惠奸,失蹤者是張志新(化名)和其女友劉穎梗掰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拥坛,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡著摔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年摹察,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杂伟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匪燕,我是刑警寧澤帽驯,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布龟再,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫌术。R本人自食惡果不足惜哀澈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一弛矛、第九天 我趴在偏房一處隱蔽的房頂上張望扒寄。 院中可真熱鬧拟烫,春花似錦该编、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)公条。三九已至,卻和暖如春迂曲,著一層夾襖步出監(jiān)牢的瞬間靶橱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工路捧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留关霸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓杰扫,卻偏偏與公主長(zhǎng)得像队寇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子章姓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • (1) 月明了佳遣,星稀了,歸來(lái)的列車又遠(yuǎn)去了 你站在北斗凡伊,我站在仙后 遙遙相望的零渐,是那顆觸不可及的北極星 (2) 也...
    林若玄葉閱讀 1,121評(píng)論 45 105
  • 【Day 4】今日閱讀《好好學(xué)習(xí)》P89-P109 提升學(xué)習(xí)能力的三個(gè)技巧 1. 記錄 1)如實(shí)的記錄 大所數(shù)時(shí)候...
    hanny嗨皮王閱讀 163評(píng)論 0 1
  • 我自小身子便弱,容易看見(jiàn)一些不干凈的東西系忙。娘把我送到瀾清山上的一座寺廟里靜修诵盼,方丈說(shuō),等我及笄后笨觅,便不會(huì)再看見(jiàn)這些...
    九皈Y閱讀 294評(píng)論 0 0
  • 遇見(jiàn)2000年大三時(shí)寫的拦耐,記得是借同學(xué)的電腦,有感而發(fā)见剩,1個(gè)多小時(shí)完成杀糯。 很久很久以前,在一個(gè)陽(yáng)光明媚的初春早晨苍苞,...
    剡溪散人閱讀 345評(píng)論 0 0
  • 文/舟子 這一天固翰,要做的事情很多 比如爬在床頭,看日出 染紅整個(gè)上午羹呵,或者 就這樣靜靜等待某人的腳步 我會(huì)寫一首小...
    舟子先生閱讀 359評(píng)論 3 1