整個二叉排序樹最難的點也就是刪除操作,你看懂我的刪除,二叉排序樹你就完全了解了。具體有難度的地方已在文中注釋
binary search tree:
/**
* @author jay
* @date 2020/7/10 10:22
* @description:
*/public
class
bstcomparable
>
}private node root;
private
int size;
public
bst(
)public
intgetsize()
public
boolean
isempty()
public
void
add(e e)
private node add
(node root,e e)
//通過compareto方法,e的值比根節點小會返回-1
if(e.
compareto
(root.e)
<0)
root.left=
add(root.left, e)
;else
if(e.
compareto
(root.e)
>0)
root.right=
add(root.right,e)
;return root;
}public
boolean
contains
(e e)
public
boolean
contains
(node node,e e)
//前序遍歷
public
void
preorder()
private
void
preorder
(node root)
//後序遍歷
public
void
postorder()
private
void
postorder
(node root)
//二叉樹的中序遍歷
public
void
inorder()
private
void
inorder
(node root)
//非遞迴形式前序遍歷
public
void
preordernr()
}public
void
bfs()}
//返回最小值,遞迴
public e minimum()
public node minimum
(node node)
//返回最小值,非遞迴
public e minimumnr()
//返回最大值
public e maximum()
public node maximum
(node node)
//返回最大值,非遞迴
public e maximumnr()
//刪除二分搜尋樹的最小結點並返回其值
public e removemin()
public node removemin
(node node)
node.left=
removemin
(node.left)
;return node;
//返回刪除後的新子樹
}public e removemax()
public node removemax
(node node)
node.right=
removemax
(node.right)
;return node;
//返回刪除後的新子樹
}public
void
remove
(e e)
//刪除以node為根的二分搜尋樹中值為e的結點,遞迴演算法
//返回刪除結點後新的二分搜尋樹的根
private node remove
(node node, e e)
else
if(e.
compareto
(node.e)
<0)
else
if(node.right == null)
//找到右子樹最小的節點,也可以使用左子樹最大節點
node successor =
minimum
(node.right)
;//為其接上刪除右子樹最大節點後的新子樹
successor.right =
removemin
(node.right)
;//為其接上左子樹
successor.left = node.left;
node.left = node.right = null;
//這裡不用寫--size;因為已經在removemin中減少了size
return successor;}}
}
二叉搜尋樹BST
在二叉搜尋樹b中查詢x的過程為 1.若b是空樹,則搜尋失敗,否則 2.若x等於b的根結點的資料域之值,則查詢成功 否則 3.若x小於b的根結點的資料域之值,則搜尋左子樹 否則 4.查詢右子樹 指標parent指向proot的父節點,其初始呼叫值為null 若查詢成功,指標ptarget指向目標節點,...
二叉搜尋樹(BST)
二叉搜尋樹 bst bst 或者是一棵空樹,或者對於任何乙個結點,設其值為k,則該結點的左子樹的值小於k,右結點的值大於k。二叉搜尋樹按照中根遍歷將各個結點列印,將得到按照大到小的順序排列。bsg示意圖 二叉搜尋樹的效率在於檢索,將演算法複雜度從2 k減少到log n 檢索方式 從根結點開始,如果等...
BST二叉搜尋樹
深入學習理解bst include using namespace std typedef struct bitnodebitnode,bitree 二叉樹的插入操作 void insert bitnode root,int x 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...