原:
查詢刪除等等。。。。
insert插入
find查詢
delete刪除
最大值最小值
前驅後繼successor predecessor
上界下屆floor ceil
某個元素的排名rank
尋找第k大元素 select
int search(int
*arr,int n,int key)
return -1;
}
int bisearch(int *arr,int n,int key)
else
if(arr[mid]>key)
else
}return -1;
}
struct node//建構函式
};
class bst//節點建構函式
};node *root; //root為根
int count; // count記錄的shi當前樹中擁有節點的個數
public:
bst() //bst樹的建構函式
};
node *insert(node *node,int key,int value)
if(node->key< key)
else
if(node->key>key)
else
if(node->key==key) // 因為允許重複key值的插入,所以有重複key值的時候要更新節點資訊
return node; //返回的就是這個數的根
}
void insert(int
key,int
value)
int search(node *node,int key)
else
if(node->key>key)
else
}return-1;
}
int search(int key)
if(node->left==null)
if(node->right==
null)
node* minimun(node *node)
return minimun(node->left);
}
node *s=
new node(minimun(node->right)); //用s複製該節點的右子樹的最小值的那個節點
count++;
s->right=removemin(node->right);//把右子樹那個最小值刪掉並且做s的右子樹
s->left=node->left;
delete node;
count--;
return s;
node(node *node)
node *remove(node *node,int key)
if(node->key==key)
if(node->right==
null)
// node->left!=null && node->right!=null 情況c
node *s=
new node(minimun(node->right)); //用s複製該節點的右子樹的最小值的那個節點
count++;
s->right=removemin(node->right);//把右子樹那個最小值刪掉並且做s的右子樹
s->left=node->left;
delete node;
count--;
return s;
}else
if(node->key>key)
else
}
void remove(int key) // 簡單粗暴
#include
#include
<
queue
>
#include
using namespace std;
//template
class bst//建構函式
node(node *node)
};node *root;
int count;
public:
bst()
~bst()
int size()
bool isempty()
void insert(int key,int value)
void preorder()
void inorder()
void postorder()
int search(int key)
void leverorder()
bool contain(int key)
int getfrequency(int key)
int getmin()
int getmax()
void removemin()
}void removemax()
}void remove(int key)
private:
node *insert(node *node,int key,int value)
if(node->key< key)
else
if(node->key>key)
else
if(node->key==key)
return node;
}void preorder(node *node)
}void inorder(node *node)
}void postorder(node *node)
}void levelorder(node *node)
if(p->right!=
null)}}
int search(node *node,int key)
else
if(node->key>key)
else
}return-1;
}int getfrequency(node *node,int key)
else
if(node->key>key)
else
}return-1;
}bool contain(node *node,int key)
else
if(node->key>key) else
}return
false;
}void destroy(node *node)
}node* minimun(node *node)
return minimun(node->left);
}node* maxmun(node *node)
return maxmun(node->right);
}int getmin(node *node)
return getmin(node->left);
}int getmax(node *node)
return getmax(node->right);
}node *removemin(node *node)
else
}node *removemax(node *node)
else
}node *remove(node *node,int key)
if(node->key==key)
if(node->right==
null)
// node->left!=null && node->right!=null
node *s=
new node(minimun(node->right)); //用s複製該節點的右子樹的最小值的那個節點
count++;
s->right=removemin(node->right);//把右子樹那個最小值刪掉並且做s的右子樹
s->left=node->left;
delete node;
count--;
return s;
}else
if(node->key>key)
else
}};int main() ;
int n=10;
for(int i=0;i<7;i++){
// int key=rand()%n;
int key=a
[i];
int value=2*key;
bst.insert(key,value);
cout<
二分搜尋樹
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...