一、什么是二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
二、二叉搜索树的基本结构
typedef struct node* tree;
struct node {
int element;
struct node* left;
struct node* right;
};
三、二叉搜索树的基本操作
1、 在二叉搜索树中插入结点
tree insert(tree t, int x) {
if(t == NULL){
t = (struct node*)malloc(sizeof(struct node));
t->element = x;
t->right = t->left = NULL;
}
else if(x < t->element) {
t->left = insert(t->left, x);
}
else if(x >= t->element) {
t->right = insert(t->right,x);
}
return t;
}
2、二叉搜索树的遍历
a 先序遍历
void preorder(tree t){
if(t == NULL) return ;
else{
pre[cnt++] = t->element;
preorder(t->left);
preorder(t->right);
}
}
b 中序遍历
void inorder(tree t) {
if(t == NULL) return ;
else{
inorder(t->left);
in[cnt++] = t->element;
inorder(t->right);
}
}
c 后序遍历
void postorder(tree t) {
if(t == NULL) return ;
else{
postorder(t->left);
postorder(t->right);
post[cnt++] = t->element;
}
}
3、 在二叉搜索树中删除结点
void delete_BST(struct node **root, int element)
{
struct node *p = *root;
if(element == p->key)
{
if(p->lchild == NULL && p->rchild == NULL)
*root = NULL;
else if(p->lchild == NULL)
*root = p->rchild;
else if(p->rchild == NULL)
*root = p->lchild;
else
{
struct node *temp = p->rchild, *find = NULL;
while(temp != NULL)
{
find = temp;
temp = temp->lchild;
}
find->lchild = p->lchild;
p = p->rchild;
*root = p;
}
}
if(element < p->key)
{
delete_BST(&p->lchild, element);
}
if(element > p->key)
{
delete_BST(&p->rchild, element);
}
}
三、二叉搜索树的应用
主要用于排序和查找,会比较快。