二分搜尋樹BinarySearchTree

2021-10-05 22:49:57 字數 3176 閱讀 4291

二叉樹和鍊錶一樣,是動態資料結構

class

node

}private node root;

private

int size;

public

bst(

)public

intsize()

public

boolean

isempty()

//向二分搜尋樹中新增新的元素e

public

void

add(e e)

//向以node為根的二分搜尋樹中插入元素e,遞迴演算法

//返回插入新節點後二分搜尋樹的根

private node add

(node node,e e)

if(e.

compareto

(node.e)

<0)

else

if(e.

compareto

(node.e)

>0)

return node;

}//看二分搜尋樹中是否包含元素e

public

boolean

contains

(e e)

//看以node為根的二分搜尋樹中是否包含元素e,遞迴演算法

private

boolean

contains

(node node,e e)

//二分搜尋樹的前序遍歷

public

void

preorder()

//前序遍歷以node為根的二分搜尋樹,遞迴演算法

private

void

preorder

(node node)

//二分搜尋樹的中序遍歷

public

void

inorder()

//中序遍歷以node為根的二分搜尋樹,遞迴演算法

private

void

inorder

(node node)

//二分搜尋樹的後序遍歷

public

void

postorder()

//後序遍歷以node為根的二分搜尋樹,遞迴演算法

private

void

postorder

(node node)

//二分搜尋樹的層序遍歷

public

void

levelorder()

}// 尋找二分搜尋樹的最小元素

public e minimum()

// 返回以node為根的二分搜尋樹的最小值所在的節點

private node minimum

(node node)

// 尋找二分搜尋樹的最大元素

public e maximum()

// 返回以node為根的二分搜尋樹的最大值所在的節點

private node maximum

(node node)

// 從二分搜尋樹中刪除最小值所在節點, 返回最小值

public e removemin()

// 刪除掉以node為根的二分搜尋樹中的最小節點

// 返回刪除節點後新的二分搜尋樹的根

private node removemin

(node node)

node.left =

removemin

(node.left)

;return node;

}// 從二分搜尋樹中刪除最大值所在節點

public e removemax()

// 刪除掉以node為根的二分搜尋樹中的最大節點

// 返回刪除節點後新的二分搜尋樹的根

private node removemax

(node node)

node.right =

removemax

(node.right)

;return node;

}//從二分搜尋樹中刪除元素為e的節點

public

void

remove

(e e)

//刪除以node為根的二分搜尋樹中值為e的節點,遞迴演算法

//返回刪除節點後新的二分搜尋樹的根

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;

return successor;}}

@override

public string tostring()

// 生成以node為根節點,深度為depth的描述二叉樹的字串

private

void

generatestring

(node node,

int depth, stringbuilder res)

res.

(generatedepthstring

(depth)

+ node.e +

"\n");

generatestring

(node.left, depth +

1, res)

;generatestring

(node.right, depth +

1, res);}

private string generatedepthstring

(int depth)

}

二分搜尋樹

1.二分搜尋樹 binary search tree 性質 a.二分搜尋樹是二叉樹 b.二分搜尋樹的每乙個節點的值 大於其左子樹的所有節點的值 小於其右子樹的所有節點的值 c.每一顆子樹也是二分搜尋樹 e.儲存的元素必須具有可比較性 二分搜尋樹的乙個缺點 2.二分搜尋樹的操作 a.二分搜尋樹新增新元...

二分搜尋樹

include include include include include using namespace std templateclass bst bst int size bool isempty 插入結點 void insert key key,value value 是否包含該鍵值的結...

二分搜尋樹

template class bst node root intcount public bst bst intsize bool isempty 插入新的節點 public void insert key key,value value private 向以node為根的二叉搜尋樹中,插入節點 k...