線索二叉樹概念
n個結點的二叉鏈表中含有n+
這種加上了線索的二叉鏈表稱為線索鏈表
注意
線索鏈表解決了二叉鏈表找左
線索鏈表中的結點結構為
其中:
ltag和rtag是增加的兩個標志域
【例】下面(a)圖所示的中序線索二叉樹
注意
圖中的實線表示指針
結點C的左線索為空
結點E的右線索為空
線索二叉樹中
二叉樹的線索化
將二叉樹變為線索二叉樹的過程稱為線索化
按某種次序將二叉樹線索化的實質是
具體過程可【參見動畫演示】
(
算法與中序遍歷算法類似
該算法應附設一個指針pre始終指向剛剛訪問過的結點(pre的初值應為NULL)
(
typedef enum { Link
typedef struct node{
DataType data
PointerTag ltag
Struct node *lchild
} BinThrNode
typedef BinThrNode *BinThrTree
BinThrNode *pre=NULL
void lnorderThreading(BinThrTree p)
{//將二叉樹p中序線索化
if(p){ //p非空時
InorderThreading(p
//以下直至右子樹線索化之前相當於遍歷算法中訪問結點的操作
p
//(即
p
*(pre){ //若*p的前趨*pre存在
if(pre
pre
if(p
p
} // 完成處理*pre的線索
pre=p
InorderThreeding(p
}//endif
} //InorderThreading
(
和中序遍歷算法一樣
前序線索化和後序線索化算法與二叉樹的中序線索化類似
From:http://tw.wingwit.com/Article/program/sjjg/201311/22726.html