二叉樹的線索化

2021-07-06 05:49:47 字數 997 閱讀 2955

慣例:菜鳥一枚,如有錯誤和不妥之處請各位大神多多指出,謝謝!

二叉樹的傳統鏈式儲存結構僅能體現出一種節點的父子關係,不能直接得到節點在遍歷中的前驅和後繼。由於二叉鍊錶中存在大量的空指標,可以利用這些空指標存放節點的前驅和後繼,這樣子就可以方便地進行二叉樹的有關其它操作演算法。因此,線索二叉樹目的是加快查詢節點的前驅和後繼的速度。

二叉樹線索化時規定:若節點無左子樹,令其lchild指向其前驅;若節點無右子樹,令其rchild指向其後繼。同時,每個節點需要增加兩個標誌域(ltag和rtag)表明當前的指標域所指的物件是左(右)子節點還是直接前驅(後繼)。通常標誌域定義如下:

ltag: 左孩子時為0,前驅時為1.

rtag: 右孩子時為0,後繼時為1.

以下**為對二叉樹中序線索化的構造,然後對中序線索化後的二叉樹進行中序遍歷。**及測試結果截圖如下:

#includeusing namespace std;

typedef struct bitnodebinode,*bitree;

void creatbitree(bitree &t)

else

}void visit(bitree t)

}void inthread(bitree &t,bitree &pre)

if(pre!=null && pre->rchild==null)

pre=t;

inthread(t->rchild,pre); }}

void creatinthread(bitree t)

}bitree firstnode(bitree p)

bitree nextnode(bitree p)

void inorder(bitree t)

int main()

測試結果截圖如下:

(C )二叉樹的線索化 線索二叉樹

線索化標誌tag enum pointertag 結點結構 template struct binarytreenodethd 基類迭代器 template struct binarytreeiterator t operator t operator bool operator const sel...

線索化二叉樹以及遍歷線索化二叉樹

1.線索二叉樹基本介紹 n個結點的二叉鍊錶中含有n 1 公式 2n n 1 n 1 個空指標域。利用二叉鍊錶中的空指標域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指標 這種附加的指標稱為 線索 這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binaryt...

線索化二叉樹

define crt secure no warnings 1 includeusing namespace std enum pointertag 列舉 其結構如下 void prevorderthreading 前序 void postorderthreading 後序 void inorder...