線索二叉樹

2021-08-14 14:56:17 字數 651 閱讀 6717

線索二叉樹就是把普通二叉樹所有的空指標給利用了,如果左孩子指標為空,則讓它指向前驅節點,如果右孩子為空,則指向後繼(不同的遍歷方法前驅後繼不一樣,一般是用中序遍歷),但是有個問題就是需要知道左右孩子指標所指的節點究竟是前驅後繼,還是說左右孩子,這時可以用ltag和rtag兩個bool變數來判斷,如果ltag=false則指的左孩子,為true則指向前驅,rtag類似。重寫結構體如下:

typedef int data;

typedef struct threadtree

ttree;

ttree* pre = new ttree;

ttree* temp = pre;

void initpre()

void thread(ttree* &root)

if (!pre->rchild) //在pre還沒有被賦值的時候,pre也會被使用一次,所有pre初始化的時候也要有空間

pre = root; //只要訪問到乙個樹節點,就儲存下來,訪問到下個節點的時候,pre就是它前驅

thread(root->rchild); }}

void deletepre() //中序遍歷的第乙個節點是沒有前驅的,目前指的是臨時變數temp,要改為指向空,同時刪除temp的記憶體

線索二叉樹

當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...

線索二叉樹

1.線索二叉樹結構和操作定義 threadbintree.h 功能 線索標誌域所有值 typedef enumnodeflag 功能 線索二叉樹結構體 typedef struct threadtreethreadbintree 前驅節點指標 threadbintree previous null ...

線索二叉樹

原始碼 中序線索二叉樹 author 菜鳥 version 2014.7.23 include include include typedef char datatype using namespace std 定義線索二叉樹的結構體 typedef struct nodethreadbitreen...