線索化二叉樹

2021-10-03 15:03:15 字數 1854 閱讀 8183

每乙個結點的左指標指向其左子結點或前驅結點,右指標指向其右子結點或後繼結點,這樣可以構成乙個線索化二叉樹。為了方便後續的操作,我們需要將其指標指向的兩種型別區分開。同時在遍歷的過程中,由於我們無法由子結點得到前驅結點或者父結點,需要乙個pre結點儲存遍歷的前乙個結點。

// 編寫對二叉樹進行中序線索化的方法

/* * node就是當前需要線索化的結點

*/public

void

threadednodes

(book0 node)

// 1、先線索化左子樹

threadednodes

(node.

getleft()

);// 2、線索化當前結點

if(node.

getleft()

== null)

// 處理後繼結點

if(pre != null && pre.

getright()

== null)

// 每處理乙個結點後,讓當前結點是下乙個結點的前驅結點

pre = node;

// 3、線索化右子樹

threadednodes

(node.

getright()

);}// 遍歷線索化二叉樹的方法

public

void

threadedlist()

system.out.

println

(node)

;// 如果當前結點的右指標指向的是後繼結點,就一直輸出

// 不是後繼節點就退出迴圈,獲得其真實指向的右結點

while

(node.

getrighttype()

==1)// 替換這個遍歷的結點

node = node.

getright()

;}}}

class

book0

public

void

setlefttype

(int lefttype)

public

intgetrighttype()

public

void

setrighttype

(int righttype)

public

book0

(int no, string name)

public

intgetno()

public

void

setno

(int no)

public string getname()

public

void

setname

(string name)

public book0 getleft()

public

void

setleft

(book0 left)

public book0 getright()

public

void

setright

(book0 right)

@override

public string tostring()

}

線索化二叉樹以及遍歷線索化二叉樹

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...

線索化二叉樹

二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊.二叉樹的結...