基本介紹:
示例**
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...