慣例:菜鳥一枚,如有錯誤和不妥之處請各位大神多多指出,謝謝!
二叉樹的傳統鏈式儲存結構僅能體現出一種節點的父子關係,不能直接得到節點在遍歷中的前驅和後繼。由於二叉鍊錶中存在大量的空指標,可以利用這些空指標存放節點的前驅和後繼,這樣子就可以方便地進行二叉樹的有關其它操作演算法。因此,線索二叉樹目的是加快查詢節點的前驅和後繼的速度。
二叉樹線索化時規定:若節點無左子樹,令其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...