學習線索化二叉樹

2021-10-11 15:26:22 字數 4079 閱讀 2749

2020/12/7——周一

package datastructure.tree.threadbinarytreedemo;

public

class

threadbinarytreedemo

}//定義乙個threadbinarytree二叉樹

class

threadbinarytree

public

void

setpre

(heronode pre)

public

threadbinarytree()

public

threadbinarytree

(heronode root, heronode pre)

public

void

threadednode()

// 便利線索化二叉樹

public

void

threadedlist()

// d列印當前這個節點

system.out.

println

(node)

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

while

(node.

getrighttype()

==1)// 替換這個便利的節點

node = node.

getright()

;}}//編寫對二叉樹進行中序線索化

public

void

threadednode

(heronode node)

//先線索化左子樹,

threadednode

(node.

getleft()

);//當前節點的前驅節點

if(node.

getleft()

==null)

//處理後繼節點

if(pre!=null && pre.

getright()

== null)

// !!!每次處理乙個節點後,當前節點就是下乙個節點的前驅節點

pre=node;

//右子樹

threadednode

(node.

getright()

);}public heronode getroot()

public

void

setroot

(heronode root)

public

void

delnode

(int no)

else

}else

}//前序遍歷

public

void

preorder()

else

}public

void

infixorder()

else

}public

void

postorder()

else

}//前序遍歷

public heronode preordersearch

(int no)

else

}public heronode infixsearch

(int no)

else

}public heronode postsearch

(int no)

else

return null;}}

//建立heronode結點

class

heronode

public

void

setlefttype

(int lefttype)

public

intgetrighttype()

public

void

setrighttype

(int righttype)

public

heronode()

public

heronode

(int no, string name)

public

intgetno()

public

void

setno

(int no)

public string getname()

public

void

setname

(string name)

public heronode getleft()

public

void

setleft

(heronode left)

public heronode getright()

public

void

setright

(heronode right)

@override

public string tostring()

';}//編寫前序遍歷的方法

public

void

preorder()

//遞向右子樹遍歷if(

this

.right!=null)

//編寫中序遍歷的方法

}public

void

infixorder()

system.out.println (

this);

if(this

.right!=null)

}//編後序遍歷的方法

public

void

postorder()

if(this

.right!=null)

system.out.println (

this);

}//前序遍歷查詢

public heronode preordersearch

(int no)

heronode resnode=null;

//判斷當前結點的左子節點是否為空.不為空就前序查詢左子節點

//如果左遞迴前序查詢,找到節點就返回if(

this

.left!=null)

if(resnode!=null)

//判斷當前節點的右子節點是否為空,不為空就進行前序查詢右子節點if(

this

.right!=null)

return resnode;

}//中序遍歷查詢

public heronode infixordersearch

(int no)

if(resnode!=null)

system.out.println (

"進入中序遍歷一次");

if(this

.no==no)

return

this;if

(this

.right!=null)

if(resnode!=null)

return resnode;

}//後續遍歷查詢

public heronode postordersearch

(int no)

if(resnode!=null)if(

this

.right!=null)

if(resnode!=null)

system.out.println (

"進入後序遍歷一次");

if(this

.no==no)

return resnode;

}//刪除乙個節點

public

void

delnode

(int no)if(

this

.right != null &&

this

.right.no == no)

//向左子樹遞迴刪除if(

this

.left!=null)if(

this

.right!=null)

}}

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

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

線索化二叉樹

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