BST树的搜索和插入一并开始运行

//使用一个标志位进行改写,在一个函数里进行完成搜索和插入操作

typedef struct BSTNode *PBSTNode,NNSTNode;

#define key(A) (A)

#define NULLitem 0

#define eq(A,B) (key(A) == key(B))

typedef int Key;

typedef int Item;


struct BSTNode

{

   Item data;

   PBSTNode left;

   PBSTNode right;

   int N;

}__attribute__((aligned(sizeof(int))));

PBSTNode header,z;//z为哑节点,就是外节点


PBSTNode BSTsub(PBSTNode link,Item item,int *flag)

{

    if (!link)

    {

        return NEW(item,NULL, NULL, 1);

    }

    Key t = key(link->data);

    

    if (t == key(item))

    {

        *flag = 1;

        return link;

    }

    else if (t > key(item))

    {

        link->left = BSTsub(link->left,item,flag);

    }

    else

    {

        link->right = BSTsub(link->right,item,flag);

    }

    if (*flag == 0)

    {

        link->N++;

    }

    return link;

}


void BSTsearchinsert(Item item)

{

    if (header == z)

    {

        header = NEW(item,NULL, NULL, 1);

        return;

    }

    int flag = 0;

    header = BSTsub(header,item,&flag);

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值