前面的查找我们都是静态查找,因为数据集是有序存放,查找的方法有多种,可以使用折半,插值,斐波那契等,但是因为有序,在插入和删除操作上的效率并不高。
这时我们就需要一种动态查找方法,既可以高效实现查找,又可以使得插入和删除效率不错,这时我们可以考虑二叉排序树

二叉排序树

一:定义

又称为二叉搜索树(查找树),是一棵树,可以为空,但是需要满足以下性质:
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

相关文章: