資料結構 14 線索化二叉樹

2021-10-05 11:23:06 字數 3979 閱讀 2748

}//建立 binarytree 二叉樹

class

threadedbinarytree

public

void

threadernodes()

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

public

void

threadernodes

(heronode node)

//向左

threadernodes

(node.

getleft()

);//當前

//處理當前節點的前驅節點

if(node.

getleft()

== null)

//處理後繼節點

if( pre!=null && pre.

getright()

== null)

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

pre = node;

//向右

threadernodes

(node.

getright()

);}//刪除節點

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 infixordersearch

(int no)

else

}//後序查詢

public heronode postordersearch

(int no)

else}}

//建立 heronode 節點

class

heronode

public

void

setlefttype

(int lefttype)

public

intgetrighttype()

public

void

setrighttype

(int righttype)

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);

}/**

* 前序查詢

** @param no 編號

* @return 返回node 否則返回null

*/public heronode preordersearch

(int no)

//左 heronode resnode = null;if(

this

.left != null)

if(resnode != null)

//右if

(this

.right != null)

return resnode;

}/**

* 中序查詢

** @param no 編號

* @return 返回node 否則返回null

*/public heronode infixordersearch

(int no)

if(resnode != null)

system.out.

println

("進入");

//比較當前節點if(

this

.no == no)

//右if

(this

.right != null)

return resnode;

}/**

* 後序查詢

** @param no 編號

* @return 返回node 否則返回null

*/public heronode postordersearch

(int no)

if(resnode != null)

//右if

(this

.right != null)

if(resnode != null)

system.out.

println

("進入");

//比較當前節點if(

this

.no == no)

return null;

}/**

* 遞迴刪除節點

* 1、如果刪除䣌節點是葉子節點,則刪除該節點

* 2、如果刪除的節點是非葉子節點,則刪除該子樹

*/public

void

delnode

(int no)if(

this

.right != null &&

this

.right.no == no)if(

this

.left != null)if(

this

.right != null)

}}

資料結構 二叉樹的線索化

線索二叉樹它解決了無法直接找到該結點在某種遍歷序列中的前趨和後繼結點的問題,出現了二叉鍊錶找左 右孩子困難的問題,線索二叉樹又分為前序線索化,中序線索化和後序線索化,分別用不同的邏輯去實現。線索二叉樹的實現思想 借用乙個列舉型別tag其中包含兩個狀態link 代表有資料 thread 代表下乙個節點...

線索二叉樹 資料結構

按照教材進行中序二叉樹線索化 線索化就是就將二叉樹的多出來的n 1個鏈域用做指向前驅和後繼用,前驅後繼指的是按中序遍歷二叉樹產生的前驅和後繼 ltag 0 有左孩子 ltag 1 無左孩子,指向前驅 rtag 0 有右孩子 rtag 1 無右孩子,指向後繼 例子 構造二叉樹 形如abc de fg ...

資料結構(線索二叉樹)

線索二叉樹的前序,中序,後序 typedef struct nodenode 前序線索二叉樹 參照中序即可 void prethread node p,node pre if pre null pre rchild null pre p if p ltag 0 prethread p lchild,...