二叉搜索树的基本操作 ---- 插入,删除,查找,销毁,遍历

首先来看看二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉搜索树的结构体#define bool int#define true 1#define false 0typedef ...
摘要由CSDN通过智能技术生成

首先来看看二叉搜索树的概念
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树

  • 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  • 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
  • 它的左右子树也分别为二叉搜索树

二叉搜索树的结构体

#define bool int
#define true 1
#define false 0
typedef int BDataType;
typedef struct BSTreeNode
{
    struct BSTreeNode* _pLeft;
    struct BSTreeNode* _pRight;
    BDataType _data;
}BSTNode;

初始化

void InitBSTree(BSTNode** pRoot)//初始化
{
    assert(pRoot);
    *pRoot = NULL;
}

插入
在二叉搜索树中插入新元素时,必须先检测该元素是否在数中已经存在。如果已经存在,则不进行插入;否则将新元素加入到搜索停止的地方。

BSTNode* BuyBSTreeNode(BDataType data)
{
    BSTNode* pNewNode = (BSTNode*)malloc(sizeof(BSTNode));
    if (pNewNode == NULL)
    {
        perror("malloc::BuyBSTreeNode");
        return NULL;
    }
    pNewNode->_data = data;
    pNewNode->_pLeft = NULL;
    pNewNode->_pRight = NULL;
    return pNewNode;
}
非递归
bool InSertBSTree(BSTNode** pRoot, BDataType data)//插入
{
    BSTNode* parent = NULL;
    BSTNode* pNewNode = NULL;
    BSTNode* pCur = NULL;
    assert(pRoot);
    pCur = *pRoot;
    //空树 ---- 直接插入
    if (*pRoot == NULL)
    {
        *pRoot = BuyBSTreeNode(data);
        return true;
    }
    //找该结点在二叉搜索树中的插入位置
    while (pCur)
    {
        parent = pCur;
        if (data < pCur->_data)
            pCur = pCur->_pLeft;
        else if (data > pCur->_data)
            pCur = pCur
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值