為什麼要線索化二叉樹?
:傳統的二叉樹的鏈式儲存,只能體現一種父子關係,不能直接得到結點在遍歷中的前驅結點和後繼結點,而且一般僅能從最上方往下找,很不方便,不能從任意結點開始遍歷尋找前驅後繼。前文中提過二叉樹鏈式儲存有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...