template classbst };
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...