二分搜尋樹

2022-06-28 08:48:09 字數 2454 閱讀 1760

#include #include #include #include #include using namespace std;

templateclass bst

~bst()

int size()

bool isempty()

// 插入結點

void insert(key key, value value)

// 是否包含該鍵值的結點

bool contain(key key)

// 返回值為指標型別: 若未查找到, 返回空

// 若查詢到, 返回指向value位址的指標

value * search(key key)

//前序遍歷

void preorder()

// 中序遍歷

void inorder()

// 後序遍歷

void postorder()

// 層序遍歷

void levelorder()

} // 尋找最小的鍵值

key minimum()

// 尋找最大的鍵值

key maximum()

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

void removemin()

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

void removemax()

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

void remove(key key)

private :

struct node

node(node *node)

};node * root;

int count; // 二分搜尋樹的節點個數

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

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

return node;

} bool contain(node * node, key key)

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

value * search(node * node, key key)

void preorder(node * node)

return ;

} void inorder(node * node)

return ;

} void postorder(node * node)

return ;

} void destroy(node * node)

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

node * minimum(node * node)

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

node maximum(node * node)

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

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

node * removemin(node * node)

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

return node;

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

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

node * removemax(node * node)

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

return node;

} // 刪除以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.二分搜尋樹新增新元...

二分搜尋樹

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

leetcode 二分搜尋樹

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