二叉搜索树以BST简称
7.1 二叉搜索树
定义: 二叉搜素树或者是一棵空二叉树,有如下性质
1. 二叉树中任意两个结点关键字值不相等
2. 若左子树不空,左子树上的所有结点的关键字值均小于根结点关键字值
3. 若右子树不空,右子树上的所有结点的关键字值均大于根节点关键字值
4. 左、右子树分别是一棵二叉树
中序遍历一棵BST,得到关键字值递增序列的有序序列,所以也称为二叉排序树
二叉搜索树递归搜索
BTnode search(BTnode T,int key){
if(T=NULL){
return NULL;
}
if(T->data===key)
return T;
else if(key<T->data){
return search(T->lchild,k);
}else{
return search(T->rchild,k);
}
}
二叉搜索树时间效率与其高度相关;
二叉搜索树的插入
BTnode * insert(BTnode *bt,int key){
if(bt==NULL){
BTnode *p=(BTnode*)malloc(sizeof(BTnode));
p->lchild=NULL;
p->rchild=NULL;
p->data=key;
}
else if(key>bt->data){
bt->rchild=insert(bt->rchild,key);
}
else if(key<bt->data){
bt->lchild=insert(bt->lchild,key);
}
return bt;
}
二叉搜索树的删除
- 删除叶子结点,只需要结点对应的双亲结点的孩子置为NULL即可;
- 删除只有一棵非空子树的非叶子结点只要令其唯一非空子树取代即可
- 删除有两棵非空子树的非叶子结点时,可用左子树最大元素或者右子树最小元素替代该节点;然后删除替代的结点即可;
- BST任意一棵子树中最大元素与最小元素所在的结点度一定是0或者1