資料結構 二叉排序樹(BST)

2021-10-03 05:51:59 字數 4464 閱讀 9905

基本介紹:

示例**

public

class

binarysorttreedemo

;// int arr = ;

binarysorttree binarysorttree =

newbinarysorttree()

;for

(int item : arr)

binarysorttree.

infixorder()

; node node = binarysorttree.

get(10)

; system.out.

println

("查詢的節點:"

+ node)

; node = binarysorttree.

getparent(56

);system.out.

println

("查詢節點的父節點:"

+ node)

;for

(int item : arr)

system.out.

println

("刪除節點後:");

binarysorttree.

infixorder()

;}}@data

class

binarysorttree

else

}/**

* 新增節點

** @param node

*/public

void

addnode

(node node)

/*如果根節點為空,待新增的節點直接加到根節點即可*/

if(root == null)

else

}/**

* 查詢指定節點

** @param value

* @return

*/public node get

(int value)

return root.

get(value);}

/** * 查詢指定節點的父節點

** @param value

* @return

*/public node getparent

(int value)

return root.

getparent

(value);}

/** * 刪除節點

** @param value

*/public

void

delnode

(int value)

/*獲取到待刪除的節點*/

node targetnode =

get(value)

;/*如果未查找到待刪除節點,待刪除節點為空,直接返回*/

if(targetnode == null)

/*如果root沒有子節點,說明root節點就是待刪除節點*/

if(root.

getleft()

== null && root.

getright()

== null)

/*獲取到待刪除節點的父節點*/

node parent =

getparent

(value)

;/*待刪除節點是葉子節點*/

if(targetnode.

getleft()

== null && targetnode.

getright()

== null)

else

if(parent.

getright()

!= null && parent.

getright()

.getvalue()

== value)

/*待刪除節點右左右兩個子節點*/

}else

if(targetnode.

getleft()

!= null && targetnode.

getright()

!= null)

else

else

else

if(parent.

getright()

!= null && parent.

getright()

.getvalue()

== value)

}/*待刪除節點只有個右子節點*/

}else

else

else

if(parent.

getright()

!= null && parent.

getright()

.getvalue()

== value)}}

}}/** * 1、返回以node為根節點的二叉排序樹的最小節點的值

* 2、刪除node為根節點的二叉排序樹的最小節點

** @param node 作為二叉樹根節點的節點

* @return 返回最小值

*/public

intdelrighttreemin

(node node)

node targetnode = node;

/*向左子樹遞迴查詢,直到葉子節點*/

while

(targetnode.

getleft()

!= null)

/*此時 targetnode就指向了最小節點*/

delnode

(targetnode.

getvalue()

);return targetnode.

getvalue()

;}/** * 1、返回以node為根節點的二叉排序樹的最大節點的值

* 2、刪除node為根節點的二叉排序樹的最大節點

** @param node 作為二叉樹根節點的節點

* @return 返回最大值

*/public

intdellefttreemax

(node node)

node targetnode = node;

/*向右子樹遞迴查詢,直到葉子節點*/

while

(targetnode.

getright()

!= null)

/*此時 targetnode就指向了最大節點*/

delnode

(targetnode.

getvalue()

);return targetnode.

getvalue()

;}}@data

class

node

@override

public string tostring()

';}/**

* 中序遍歷

*/public

void

infixorder()

system.out.

println

(this);

if(this

.right != null)

}/**

* 新增節點

** @param node

*/public

void

add(node node)

else

/*如果當前節點的值小於等於待新增節點的值,則待新增節點應加入到當前節點的右子樹*/

}else

else}}

/** * 根據值獲取節點

* 切記:如果值相同的時候返回的都是第一值的節點,

** @param value 值

* @return 如果找到就返回該節點,未找到返回null

*/public node get

(int value)

/*如果待查詢的值小於當前節點的值,遞迴向左子樹查詢*/

if(value <

this

.value)

return

this

.left.

get(value)

;/**

* 如果待查詢的值大於等於當前節點的值,遞迴向右子樹查詢

* 如果在新增的時候將等於節點放在左子樹,這是等於將放在向左遞迴查詢中

*/}else

return

this

.right.

get(value);}

}public node getparent

(int value)

if(value <

this

.value &&

this

.left != null)

if(value >=

this

.value &&

this

.right != null)

return null;

}}

資料結構 二叉排序樹BST初探

首先給出二叉排序樹 binary sort tree 的定義 一棵二叉排序樹或者是一棵空樹或者滿足以下條件 1 若它的左子樹不為空,則左子樹所有節點的值均小於根的值 2 若它的右子樹不為空,則右子樹所有節點的值均大於根的值 3 左右子樹本身又分別是二叉排序樹 如下圖就是乙個二叉排序樹 繪畫水平真的就...

資料結構與演算法 二叉排序樹 BST

二叉排序樹 bst binary sort search tree 對於二叉排序樹的任何乙個非葉子節點,要求左子節點的值比當前節點的值小,右子節點的值比當前節點的值大。特別說明 如果有相同的值,可以將該節點放在左子節點或右子節點。比如針對資料 7,3,10,12,5,1,9 對應的二叉排序樹為 二叉...

資料結構課設 BST二叉排序樹

程式設計實現二叉排序樹的建立 插入 刪除和查詢 對於給定的這組數在二叉排序樹上進行查詢,給出兩種情況下的查詢成功和不成功時的asl bst include using namespace std const int maxn 1e5 typedef struct node bsnode,bstree...