中序線索二叉樹

2022-08-03 05:15:12 字數 892 閱讀 1145

對於一顆有n個節點的二叉樹,每個節點有2個指標域,共2n個指標域,使用n-1個指標域,二叉線索樹便是將剩下的n+1個指標域也利用起來。

在普通二叉樹中,我們僅知道乙個節點的左右孩子,並不知道它的直接前驅節點和直接後驅節點,若能知道它的前驅節點和後去節,便可以將這個資料結構進行遍歷,可極大的提高效率。

二叉線索樹節點結構:

lchid 

lflag

data

rchild

rflag

當lflag=0時,lchild指向左孩子,為1時lchild指向前驅節點

當rflag=0時,rchild指向右孩子,為1時rchild指向後繼節點

結構定義:

struct

node

;

線索化規則:對於乙個節點,當它的lflag=1時lchild指向前驅節點,當rflag=1時rchild指向後繼節點。所以我們需要乙個指標p指向當前節點,pre指向p節點的前驅節點。若p節點的lflag=1,p的lchild指向pre,

若pre的rflag=1,pre的rchild指向p。

void intread(struct node* p, struct node*pre)

if (pre && !pre->rc)

pre = p;//

不斷跟新pre,使pre始終為p的前驅節點

intread(p->rc, pre);//

訪問右子樹

}}

struct node* first(struct node*p)

struct node* next(struct node*p)

void throughout(struct node*root)

}

中序線索二叉樹

就是在中序遍歷的時候加上線索,為了區分線索和孩子,要多加兩個標誌變數ltag,rtag如果標誌為true就表明是線索,如果為false就表示孩子 一般規定是將做指標為空的指標域用來存放直接前驅 將有指標為空的指標域用來存放直接後繼 當然如果不為空的話就不會用來存放前後繼,而是孩子了 意思就是存放前繼...

二叉樹中序線索

我先說一說 每個 節點 那 五個格 的資料 的含義中間拿乙個是儲存資料的。從左向右 第乙個 和 第五個 是指標,具體指向什麼 取決於第二個 和 第四個的值 第二個 如果是零,實線表示,則 第乙個指向的是 左孩子 第二個 如果是1,虛線表示,則 第乙個 指向的是 在中序遍歷次序下 該節點的前驅 即前乙...

線索二叉樹 中序

線索二叉樹的抽象資料型別 1 enum pointertag 2 typedef struct threadnode 3bithrnode,bithrtree threaded binary tree node 建立線索二叉樹 1 void createtree bithrtree a 29 els...