二分搜尋樹

2022-07-18 05:51:13 字數 4258 閱讀 6152

template class

bst };

node *root;

intcount;

public

: bst()

~bst()

intsize()

bool

isempty()

};

插入新的節點:

public

void

insert(key key, value value)

private

:

//向以node為根的二叉搜尋樹中,插入節點(key, value)

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

node* insert(node *node, key key, value value)

if( key == node->key )

node->value =value;

else

if( key < node->key )

node->left = insert( node->left , key, value);

else

//key > node->key

node->right = insert( node->right, key, value);

return

node;

}};

是否包含有鍵值為key的節點:

public: 

bool

contain(key key)

private://

檢視以node為根的二叉搜尋樹中是否包含鍵值為key的節點

bool contain(node*node, key key)

查詢:

public

: value*search(key key)

private

//在以node為根的二叉搜尋樹中查詢key所對應的value

value* search(node*node, key key)

前序遍歷:

public

//前序遍歷

void

preorder()

private

//對以node為根的二叉搜尋樹進行前序遍歷

void preorder(node*node)

}

中序遍歷:

public

//中序遍歷

void

inorder()

private

//對以node為根的二叉搜尋樹進行中序遍歷

void inorder(node*node)

}

後序遍歷:

public

//後序遍歷

void

postorder()

private

//對以node為根的二叉搜尋樹進行後序遍歷

void postorder(node*node)

}

析構函式:

public

: ~bst()

private

void destroy(node*node)

}

層序遍歷:

public

//層序遍歷

void

levelorder()

}

最小鍵值:

public

//尋找最小的鍵值

key minimum()

private

//在以node為根的二叉搜尋樹中,返回最小鍵值的節點

node* minimum(node*node)

最大鍵值:

public

//尋找最大的鍵值

key maximum()

private

//在以node為根的二叉搜尋樹中,返回最大鍵值的節點

node* maximum(node*node)

刪除最小節點:

public

//從二叉樹中刪除最小值所在節點

void

removemin()

private

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

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

node* removemin(node*node)

node->left = removemin(node->left);

return

node;

}

刪除最大節點:

public

//從二叉樹中刪除最大值所在節點

void

removemax()

private

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

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

node* removemax(node*node)

node->right = removemax(node->right);

return

node;

}

刪除任意節點:

public

: node(node *node)

public

//從二叉樹中刪除鍵值為key的節點

void

remove(key key)

private

//刪除掉以node為根的二分搜尋樹中鍵值為key的節點

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

node* remove(node*node, key key)

else

if( key > node->key )

else

if( node->right ==null )

//node->left != null && node->right != null

node *successor = new node(minimum(node->right));

count ++;

successor->right = removemin(node->right);

successor->left = node->left;

delete node;

count --;

return

successor;

}}

二分搜尋樹

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 是否包含該鍵值的結...

leetcode 二分搜尋樹

二分搜尋樹勢一顆典型的二叉樹,二分搜尋樹根節點的值大於左孩子節點的值,小於右孩子節點的值,插入 刪除 查詢的時間複雜度都是log n 建立,插入 思路 首先初始化第乙個節點,然後第二個節點要插入樹中需要找到要插入位置的根節點,有乙個查詢的過程,然後根據值的大小分別放在左右子樹 param a par...