大话数据结构学习笔记 - 查找之二叉排序树(Binary Sort Tree)及其C实现

本文是关于二叉排序树(又称二叉查找树)的学习笔记,包括二叉树结构、查找、插入、删除操作的描述,并探讨了不同情况下的时间复杂度,特别指出在最佳情况下的查找效率为O(logn),而最坏情况下为O(n)。此外,文中以C语言实现了二叉排序树的基本操作,并预告了后续将讨论如何构建平衡二叉排序树。
摘要由CSDN通过智能技术生成

大话数据结构学习笔记 - 查找之二叉排序树(Binary Sort Tree)及其C实现

二叉排序树

Search_Binary_Search_Tree

二叉排序树(Binary Sort Tree):又称为 二叉查找树, 它或者是一个空树,或者是具有下列性质的二叉树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
  • 它的左、右子树也分别为二叉排序树

二叉排序树主要是为了提高查找和插入删除关键字的速度

二叉树结构

/* 二叉树的二叉链表结点结构定义 */
typedef struct BiTNode         /* 结点结构 */
{
    int data;                  /* 结点数据 */
    struct BiTNode *lchild, *rchild;   /* 左右孩子指针 */
}BiTNode, *BiTree;

查找

/*
 * 递归查找二叉排序树 T 中是否存在 key, 指针 f 指向 T 的双亲, 其初始调用值是 NULL. 若查找成功, 则指针 p 指向该数据元素结点, 并返回 TRUE
 * 否则 指针 p 指向查找路径上访问的最后一个结点并返回 FALSE
 *
 */
Status SearchBST(BiTree T, int key, BiTNode *f, BiTNode **p)
{
    if(!T)  /* 查找不成功 */
    {
        *p = f;
        return FALSE;
    }
    else if(key == T->data)  /* 查找成功 */
    {
        *p = T;
        return TRUE;
    }
    else if(key < T->data)
        return SearchBST(T->lchild, key, T, p);  /* 在左子树中继续查找 */
    else
        return SearchBST(T->rchild, key, T, p);  /* 在右子树中继续查找 */
}

插入

/*
 * 当二叉排序树 T 中不存在关键字等于 key 的数据元素时, 插入 key 并返回
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值