搜索二叉树递归操作

这篇博客主要介绍了搜索二叉树的递归插入、查找和删除操作。通过递归,利用C语言的二级指针巧妙地链接节点。在插入过程中,通过二级指针传递,将新节点与父节点连接。查找时,通过不断比较大小找到目标节点并直接返回。删除操作则需要找到待删除节点,然后根据节点的子节点情况调整父节点的指针,确保树的结构正确。整个过程强调了对指针和递归的深入理解。

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

 之前给大家介绍了搜索二叉树的非递归算法,今天给大家介绍一些搜索二叉树的递归算法的操作。

  这里主要介绍的是插入,查找和删除。

其实插入和之前的二叉树的操作是一样的,不过依然是需要判断你要查入的元素应当插入的位置。

int BSTreeInsertR(BSTreeNode** tree, DataType x)

{

if (*tree == NULL)

{

*tree = BuyBSTreeNode(x);

return 0;

}

if ((*tree)->_data > x)

{

return BSTreeInsertR(&(*tree)->_left, x);

}

else if ((*tree)->_data < x)

{

return BSTreeInsertR(&(*tree)->_right, x);

}

else return -1;

}

依然是和非递归一样的判断条件,但是这里和细心的人会发现和非递归的区别,大家都知道二叉树和数组不同不是单纯的将数据放到该放的位置就行了,这里还需要做的是,你要将他的父亲结点和他链接起来,不然等会怎么去找刚插入的结点的呢?非递归的状态下我们是设置了一个parent,大家都知道函数是在栈上开辟空间并且运行的,所以你在当前函数创建一个变量,在下一个函数,或者返回到上一个函数的时候,这个临时变量会随着你栈的销毁而销毁。但是这里并没有parent这个变量,没有说将两个节点链接起来的操作,那他为什么会链接起来了呢?这里就是很巧妙的用了C语言指针的知识。

  大家发现,这个函数所传的参数都是二级指针,就是因为二级指针才巧妙的将两个节点连接到了一起。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值