手寫系列 二叉搜尋樹BST

2021-10-24 00:26:51 字數 2655 閱讀 1347

整個二叉排序樹最難的點也就是刪除操作,你看懂我的刪除,二叉排序樹你就完全了解了。具體有難度的地方已在文中注釋

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 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...