c語言 線索二叉樹的遞迴建立以及其遍歷思想

2022-06-24 08:54:08 字數 955 閱讀 7725

線索二叉樹又可以稱為穿線二叉樹,建立其目的在於能使遍歷更加方便

線索二叉樹王相對於普通二叉樹:增加額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...