前面的查找我们都是静态查找,因为数据集是有序存放,查找的方法有多种,可以使用折半,插值,斐波那契等,但是因为有序,在插入和删除操作上的效率并不高。
这时我们就需要一种动态查找方法,既可以高效实现查找,又可以使得插入和删除效率不错,这时我们可以考虑二叉排序树
二叉排序树
一:定义
又称为二叉搜索树(查找树),是一棵树,可以为空,但是需要满足以下性质:
1.非空左子树的所有键值小于其根节点的键值
2.非空右子树的所有键值大于其根节点的键值
3.左右子树都是二叉搜索树
二:操作
查找
/*
BiTree T 我们要搜索的二叉树
ElemType key我们要搜索的关键字
BiTree F 记录下我们的当前搜索子树的双亲结点
BiTree* P 当我们插入之前,会先搜索是否存在数据,若存在,不插入,若不存在,我们通过这个可以获取我们要插入的位置,直接插入即可
*/
Status SearchBST(BiTree T, ElemType key, BiTree F, BiTree* P)


/*
BiTree T 我们要搜索的二叉树
ElemType key我们要搜索的关键字
BiTree F 记录下我们的当前搜索子树的双亲结点
BiTree* P 当我们插入之前,会先搜索是否存在数据,若存在,不插入,若不存在,我们通过这个可以获取我们要插入的位置,直接插入即可
*/
Status SearchBST(BiTree T, ElemType key, BiTree F, BiTree* P)
{
if (!T)
{
*P = F; //若是未找到则返回父节点位置
return FALSE;
}
else
{
if (T->data == key)
{
*P = T; //若是找到则P返回该结点位置
return TRUE;
}
else if (T->data < key)
return SearchBST(T->rchild, key, T, P);
else
return SearchBST(T->lchild, key, T, P);
}
}
View Code