二叉查找树(查找、插入、删除)——C语言

本文详细介绍了二叉查找树(BST)的基本概念和特性,包括查找、插入和删除操作。对于查找,讨论了其时间复杂度取决于树的拓扑结构,最佳情况为O(log₂n),最坏情况为O(n)。插入操作确保新节点作为叶子节点添加。删除操作分为删除叶子节点、只有一个子节点的节点和有两个子节点的节点三种情况,其中后两种情况较为复杂,涉及树结构的调整。文章提供了相应的C语言实现代码。
摘要由CSDN通过智能技术生成

二叉查找树

二叉查找树(BST:Binary Search Tree)是一种特殊的二叉树,它改善了二叉树节点查找的效率。二叉查找树有以下性质:

(1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值

(2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值

(3)左、右子树也分别为二叉排序树

(4)没有键值相等的节点

 

二叉查找树节点的定义:

1 typedef struct BSTreeNode
2 {
3     int data;
4     struct BSTreeNode *left;//左子树
5     struct BSTreeNode *right;//右子树
6 }BSTree;

跟普通二叉树的节点定义相同

因为查找节点和插入节点都是在已经构建好二叉查找树的前提下才能进行的,在删除节点的时候才涉及到调整二叉树的操作,所以这里先以前序遍历的顺序直接输入一个二叉查找树,代码如下

 View Code

 

1、查找节点(递归实现)

若根结点的关键字等于查找的关键字,查找成功,若小于根结点的关键字的值,递归查找左子树,若大于根结点的关键字的值,递归查找右子树,若子树为空,则查找失败,查找的操作较为简单,实现代码如下

 

 1 /* 查找特定值 */
 2 void SearchData(int targ, BSTree *nod)
 3 {
 4     if (nod != NULL)
 5     {
 6         if (nod->data == targ)
 7         {
 8             printf("查找值存在,值为%d\n", nod->data);
 9         }
10         else if (nod->data > targ)
11         {
12             SearchData(targ, nod->left);    //递归查找左子树
13         }
14         else if (nod->data < targ)
15         {
16             SearchData(targ, nod->right);    //递归查找右子树
17         }
18     }
19     else if (nod == NULL)
20     {
21         printf("查找值不存在\n");
22     }
23 }

 

通过 BST 查找节点,理想情况下我们需要检查的节点数可以减半。如下图中的 BST 树,包含了 15 个节点。从根节点开始执行查找算法,第一次比较决定我们是移向左子树还是右子树,对于任意一种情况,一旦执行这一步,我们需要访问的节点数就减少了一半,从 15 降到了 7。同样,下一步访问的节点也减少了一半,从 7 降到了 3,以此类推,根据这一特点,查找算法的时间复杂度应该是 O(log­2n)

 

 

 

 

对于 BST 查找算法来说,其十分依赖于树中节点的拓扑结构,也就是节点间的布局关系,当 BST 树中的节点以扇形结构散开时,对它的插入、删除和查找操作最优的情况下可以达到亚线性的运行时间 O(log2n),

因为当在 BST 中查找一个节点时,每一步比较操作后都会将节点的数量减少一半。尽管如此,如果拓扑结构像下图中的样子时,运行时间就会退减到线性时间 O(n)。因为每一步比较操作后还是需要逐个比较其余的节点,

也就是说,在这种情况下,在 BST 中查找节点与在数组(Array)中查找就基本类似了。

因此,BST 算法查找时间依赖于树的拓扑结构。最佳情况是 O(log­2n),而最坏情况是 O(n)

测试用例:

 

查找:以前

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值