二叉樹的線索化

有 n 個結(jié)點的二叉鏈表中,其二叉鏈表的 n 個結(jié)點中共有 2n 個指針域柬批,在這 2n 個指針域中实幕,真正用于指向后件(左子結(jié)點或右子結(jié)點)的指針域只有 n-1 個卸奉,而另外的 n+1 個指針域都是空的空厌。這樣就利用二叉鏈表中的空指針域庐船,存放指向結(jié)點在某種遍歷次序下的前趨和后繼結(jié)點的指針(這種附加的指針稱為 " 線索 "),這種加上了線索的二叉鏈表稱為線索鏈表嘲更,相應(yīng)的二叉樹稱為線索二叉樹 (ThreadedBinaryTree) 筐钟。根據(jù)線索性質(zhì)的不同,線索二叉樹可分為前序線索二叉樹赋朦、中序線索二叉樹和后序線索二叉樹三種篓冲。

線索鏈表的結(jié)點結(jié)構(gòu)

線索鏈表中的結(jié)點結(jié)構(gòu)為:

ltag 和 rtag 是增加的兩個標志域,用來區(qū)分結(jié)點的左宠哄、右指針域是指向其左壹将、右孩子的指針,還是指向其前趨或后繼的線索毛嫉。

二叉樹的線索化

線索化和線索化實質(zhì)

將二叉樹變?yōu)榫€索二叉樹的過程稱為線索化 瞭恰。按某種次序?qū)⒍鏄渚€索化的實質(zhì)是:按該次序遍歷二叉樹,在遍歷過程中用線索取代空指針狱庇。

二叉樹的中序線索化

算法與中序遍歷算法類似惊畏,只需要將遍歷算法中訪問結(jié)點的操作具體化為建立正在訪問的結(jié)點與其非空中序前趨結(jié)點間線索
a). 若上次訪問到的結(jié)點的右指針為空密任,則將當前訪問到的結(jié)點地址填入颜启,并置右標志域為 1
b). 若當前訪問到的結(jié)點的左指針為空,則將上次訪問到的結(jié)點地址填入浪讳,并置左標志域為 1


如何使用二叉線索樹

在中序線索二叉樹中缰盏,查找結(jié)點 *p 的中序后繼結(jié)點分兩種情形:
a). 若 *p 的右子樹空 ( 即 p->rtag 為 Thread) ,則 p->rchild 為右線索淹遵,直接指向 *p 的中序后繼口猜。
b). 若 *p 的右子樹非空 ( 即 p->rtag 為 Link) ,則 *p 的中序后繼必是其右子樹中第一個中序遍歷到的結(jié)點透揣。也就是從*p 的右孩子開始济炎,沿該孩子的左鏈往下查找,直至找到一個沒有左孩子的結(jié)點為止辐真,該結(jié)點是 *p 的右子樹中 “ 最左下 ” 的結(jié)點须尚,即 *P 的中序后繼結(jié)點。
具體算法如下:

BinThrNode *Inorderpre(BinThrNode *p)  
{   //在中序線索樹中找結(jié)點*p的中序前趨侍咱,設(shè)p非空  
    BinThrNode *q耐床;  
    if (p->ltag==Thread) //*p的左子樹為空  
        return p->lchild; //返回左線索所指的中序前趨  
    else{  
        q=p->lchild楔脯; //從*p的左孩子開始查找  
        while (q->rtag==Link)  
            q=q->rchild撩轰; //右子樹非空時,沿右鏈往下查找  
        return q昧廷; //當q的右子樹為空時堪嫂,它就是最右下結(jié)點  
    } //end if  
}  

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市麸粮,隨后出現(xiàn)的幾起案子溉苛,更是在濱河造成了極大的恐慌,老刑警劉巖弄诲,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愚战,死亡現(xiàn)場離奇詭異,居然都是意外死亡齐遵,警方通過查閱死者的電腦和手機寂玲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梗摇,“玉大人拓哟,你說我怎么就攤上這事×媸冢” “怎么了断序?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵流纹,是天一觀的道長。 經(jīng)常有香客問我违诗,道長漱凝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任诸迟,我火速辦了婚禮茸炒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阵苇。我一直安慰自己壁公,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布绅项。 她就那樣靜靜地躺著紊册,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趁怔。 梳的紋絲不亂的頭發(fā)上湿硝,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音润努,去河邊找鬼关斜。 笑死,一個胖子當著我的面吹牛铺浇,可吹牛的內(nèi)容都是我干的痢畜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鳍侣,長吁一口氣:“原來是場噩夢啊……” “哼丁稀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倚聚,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤线衫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惑折,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體授账,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年惨驶,在試婚紗的時候發(fā)現(xiàn)自己被綠了白热。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡粗卜,死狀恐怖屋确,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤攻臀,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布焕数,位于F島的核電站,受9級特大地震影響茵烈,放射性物質(zhì)發(fā)生泄漏百匆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一呜投、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧存璃,春花似錦仑荐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至偎球,卻和暖如春洒扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衰絮。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工袍冷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猫牡。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓胡诗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淌友。 傳聞我的和親對象是個殘疾皇子煌恢,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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

  • 四瑰抵、樹與二叉樹 1. 二叉樹的順序存儲結(jié)構(gòu) 二叉樹的順序存儲就是用數(shù)組存儲二叉樹。二叉樹的每個結(jié)點在順序存儲中都有...
    MinoyJet閱讀 1,505評論 0 7
  • 線索化在二叉樹中器联,每個結(jié)點二汛,有2個域,記為 lchild與rchild,用來記錄結(jié)點的左右孩子主籍,如果某結(jié)點為葉子結(jié)...
    zhaoyubetter閱讀 667評論 0 2
  • 數(shù)據(jù)結(jié)構(gòu)和算法--二叉樹的實現(xiàn) 幾種二叉樹 1习贫、二叉樹 和普通的樹相比,二叉樹有如下特點: 每個結(jié)點最多只有兩棵子...
    sunhaiyu閱讀 6,426評論 0 14
  • 二叉樹是非線性結(jié)構(gòu)千元,即每個數(shù)據(jù)結(jié)點至多只有一個前驅(qū)苫昌,但可以有多個后繼。它可采用順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)幸海。 1祟身、順...
    文哥的學習日記閱讀 1,899評論 0 3
  • 圖片發(fā)自簡書App吾生也有涯奥务,而知也無涯,以有涯隨無涯袜硫,殆矣氯葬。已而為知者,殆而已矣婉陷。 ...
    綻放美麗閱讀 215評論 0 5