線索二叉樹又可以稱為穿線二叉樹,建立其目的在於能使遍歷更加方便
線索二叉樹王相對於普通二叉樹:增加額ltag和rtag這兩個變數
初始的兩值都是置為0的
在建立線索二叉樹中,只要是左右任意節點為空,則將對應的ltag(leftchild's tag)或rtag(rightchild's tag)置為1
c這個節點的ltag和rtag被置為了1:
就說明c的左指標由原先的閒置空指標(null)改成了指向其直接前驅的指標,指向其前驅b
c的右指標從空指標(null)改為了指向其直接後繼d
那麼我們再一次遍歷這個改裝過的二叉樹的時候:
當發現遍歷的當前節點rtag==1(存在後繼節點)的時候,就直接可以呼叫right指標找到其下乙個節點了
以後將補充如何遍歷線索二叉樹
node *pre=null;void inthread(node *p)
if(pre!=null&&pre->right==null)
pre=p;
inthread(p->right);
}}void creatinthread(node *node)
}node* next(node *p)
returnq;}
void runinthread(node *node)
printf(
"%d\t
",p->data);
while(p->right!=null)
}}
接下來再寫一下線索二叉樹是如何遍歷的:
我們上面說過,線索二叉樹在某些節點的rtag==1;
我們可以直接根據rtag來尋找其後繼節點
但是某些節點的tag==0,無法通過指標找到其直接後繼節點:
這個時候我們觀察影象就會發現:
某個擁有左右子樹的節點,其後繼節點都是都是他的右子樹的最左邊的乙個兒子或者孫子節點
c語言實現線索二叉樹的建立,線索化以及遍歷
結構與函式 typedef struct threadnodethreadnode,threadtree threadtree initthreadtree void inthread threadtree p,threadtree pre 通過中序遍歷對二叉樹線索化 void createinth...
(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...