二叉樹的線索化

2021-10-07 20:48:31 字數 1287 閱讀 4714

為什麼要線索化二叉樹?

:傳統的二叉樹的鏈式儲存,只能體現一種父子關係,不能直接得到結點在遍歷中的前驅結點和後繼結點,而且一般僅能從最上方往下找,很不方便,不能從任意結點開始遍歷尋找前驅後繼。前文中提過二叉樹鏈式儲存有n+1個空鏈域,所以可以充分利用這n+1個空指標構造出線索二叉樹使得我們更方便的遍歷二叉樹。

//不線索化找前驅

typedef

struct btnode

btnode,

*btree;

//查詢結點p的前驅

btree *p;

//p指向目標結點

btree *pre=

nullptr

;//前驅結點

btree *final=

nullptr

;//記錄最終的結點

void

visit

(btree *q)

else

}void

findpre

(btree t)

}//線索二叉樹:

typedef

struct threadnode

threadnode,

*threadtree;

threadnode *pr=

nullptr

;//全域性變數:前驅,之後三種線索化公用。

void

visit

(threadnode *t)

if(pr&&t-

>rchild==

nullptr

) pr=t;

//最後特別處理pr,因為pr遍歷到最後乙個結點時,

//若右節點為空,則pr的tag應為1,所以可以利用pr是全域性變數在別的函式進行判斷修改

}//中序遍歷線索化:

void

inthread

(threadtree t)

}void

createinthread

(threadtree t)}}

//先序線索化:

void

prethread

(threadtree t)

}void

createprethread

(threadtree t)}}

//後序線索化:

void

postthread

(threadtree t)

}void

createpostthread

(threadtree t)

}}

(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...