資料結構複習(二)線索二叉樹(中序)

2021-10-04 15:15:01 字數 1392 閱讀 5717

何為線索二叉樹?

lchild

ltag

data

rtag

rchild

l ta

g=0,& \text\\ 1,& \text \end

ltag

= 0,& \text\\ 1,& \text \end

rtag

=threadnode,

*threadtree;建立乙個中序線索二叉樹就是將二叉樹中序遍歷一次,而後把二叉鍊錶中的空指標改為指向其直接前驅或者直接後繼的線索。

用中序遍歷對二叉線索樹的遞迴演算法:

//通過中序遍歷對二叉樹線索化的遞迴演算法

void

inthread

(threadtree &p,threadtree &pre)

if(pre!=

null

&&pre-

>rchild==

null

)//前驅結點的右指標為空,將其指向當前結點

pre=p;

//用pre指向剛剛訪問過的p

inthread

(p->rchild,pre)

;//遞迴,線索化右子樹}}

void

createinthread

(threadtree t)

}

中序線索二叉樹的遍歷:

threadnode*

firstnode

(threadnode *p)

//找第乙個結點

threadnode*

nextnode

(threadnode *p)

void

inthreadorder

(threadnode *t)

}

如何構造線索二叉樹就省略了,在資料結構複習(一)裡有類似的,就是多兩個變數。

最後的實現:

int

main()

for(i=

0;i<

6;i++

)createinthread

(ttree)

; cout<<

"中序遍歷線索二叉樹:"

<

inthreadorder

(ttree)

; cout<

return0;

}

實現結果:

二叉樹的中序線索樹 資料結構 線索二叉樹

1.引入線索二叉樹 二叉樹的遍歷實質上是對乙個非線性結構實現線性化的過程,使每乙個節點 除第乙個和最後乙個外 在這些線性序列中有且僅有乙個直接前驅和直接後繼。但在二叉鍊錶儲存結構中,只能找到乙個節點的左 右孩子資訊,而不能直接得到節點在任一遍歷序列中的前驅和後繼資訊。這些資訊只有在遍歷的動態過程中才...

資料結構 中序線索二叉樹

所謂線索二叉樹無非是為了讓原本指向null的節點指向乙個詳細的 已經存在的節點,邏輯上實現指標的無空指向的實現。以下是我中 序線索二叉樹的實現。還是把先序線索二叉樹與後序線索分開來寫吧。include using namespace std template struct node template...

資料結構 線索二叉樹(中序線索二叉樹及遍歷)

二叉樹的遍歷是按照一定的規則把二叉樹中的節點按照一定的次序排列成線性序列進行訪問的,實質上就是對乙個非線性結構進行線索化操作,使得每個節點 除第乙個和最後乙個外 都有前驅 和後繼節點,有時為了運算方便需要記錄這些前驅和後繼節點,稱為二叉樹線索化,而對於不同的遍歷規則,又分為先序線索二叉樹,中序線索二...