二叉查找树的基础操作

博客介绍了二叉查找树,其性质为树中每个结点x,左子树所有关键字值小于x的关键字值,右子树所有关键字值大于x的关键字值,还提及了定义但未展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉查找树:
性质:对于树中的每个结点x,它的左子树中所有关键字值小于x的关键字值,而它的右子树中所有关键字值大于x的关键字值。

定义:

//定义一个SearchTree
struct TreeNode
{
    ElementType Element;
    SearchTree Left;
    SearchTree Right;
};

//find操作
Position Find(ElementType X,SearchTree T)
{
          if(T==NULL)
               returne NULL;
          if(X<T->Element)
              return Find(X,T->Left);
          else if(X>T->Element)
              return Find(X,T->Right);
          else return T;
}

//查找最大值操作
Position FindMax(SearchTree T)
{
    if(T==NULL)return NULL;
    else if(T->RIght==NULL)return T;
    else return FIndMax(T->RIght);
}

//查找最小值操作(非递归)
Position FindMin(SearchTree T)
{
    if(T==NULL)return NULL;
    while(T->Left!=NULL)
           T=T->Left;
    return T
}

//插入
SearchTree Insert(ElementType X,SearchTree T)
{
       if(T==NULL)
       {
             T=malloc(sizeof(struct TreeNode));
             if(T==NULL)printf("错误");
             else
             {
                    T->Element=X;
                    T->Left=T->Right=NULL;
             }           //目前为止的功能是如果这个为叶子结点,则创建一个新的元素存放X的值
        }
        else if(X<T->Element)
              T->Left=Insert(X,T->Left);   //如果X小于结点的值,则向左边插入。
        else if  (X>T->Element)
              T->Right=Insert(X,T->Right);   //如果X大于结点的值,则向右边插入。
        return T;
}


删除
SearchTree Delete(ElementType X,SearchTree T)
{
      Position TmpCell;;
      if(T==NULL)
          printf(“error”);
      else if(X<T->Element)
               T->Left=Delete(X,T->Left);
      else if  (X>T->Element)
               T->Right=Delete(X,T->Right);
      else
           if(T->Left&&T->Right)
            {
                  TmpCell=FindMin(T->Right);
                  T->Element=TmpCell->Element;
                  T->Right=Delete(T->Element,T->Right);
            }
      else
       {
            TmpCell=T;
            if(T->Left==NULL)
                  T=T->Right;
           else if (T->Right==NULL)
                  T=T->Left;
           free(TmpCell);
         }
         return T;
     }
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值