🦄个人主页:修修修也
🎏所属专栏:数据结构
⚙️操作环境:Visual Studio 2022
目录
📌二叉搜索(排序)树的概念
📌二叉搜索(排序)树的操作
结语
📌二叉搜索(排序)树的概念
我们今天要介绍的树是一种非常适合于搜索/排序的树, 当然二叉搜索(排序)树的前提是它是一颗树,并且是一颗树>二叉树。因此对于树以及树>二叉树的定义还有不太了解的朋友建议先移步这两篇博客补充一下数据结构树的相关前置知识:
【数据结构】什么是树?https://blog.csdn.net/weixin_72357342/article/details/134973723?spm=1001.2014.3001.5502
【数据结构】什么是树>二叉树?https://blog.csdn.net/weixin_72357342/article/details/135162895?sharetype=blogdetail&sharerId=135162895&sharerefer=PC&sharesource=weixin_72357342&spm=1011.2480.3001.8118
树>二叉搜索树(BST, Binary Search Tree) 也称二叉排序树或二叉查找树。它或是一颗空树,或是具有下列性质的树>二叉树:
对于树>二叉搜索树而言,其中序遍历的结果恰好是树中所有结点值的有序排列,因此特性也称其为二叉排序树。构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除关键字的速度。不管怎么说,在一个有序数据集上的查找,速度总是要快于无序的数据集的,而二叉排序树这种非线性的结构,同样有利于插入和删除操作的实现。
📌二叉搜索(排序)树的操作
以如下树>二叉搜索树为例, 分别剖析树>二叉搜索树的查找,插入和删除操作:
int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
🎏树>二叉搜索树的查找
🎏树>二叉搜索树的插入
🎏树>二叉搜索树的删除
查找元素是否在二叉搜索中,如果不存在,则返回,如果存在,则待删除结点可能存在以下四种情况:
- 待删除结点无孩子结点
- 待删除结点只有左孩子结点(不管右孩子)
- 待删除结点只有右孩子结点(不管左孩子)
- 待删除结点左,右孩子结点都有
在实际删除操作中,可以将1和2 / 3合并起来,因为我们的逻辑是哪边有孩子就管理,没有孩子就可以不管,因此无孩子结点既可以和不管右孩子结点情况合并又可以和不管左孩子情况合并,合并后实际的删除情况及过程如下三种:
- 删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点--直接删除
- 删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除
- 在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点中,再来处理该结点的删除问题--替换法删除
结语
希望这篇关于 二叉搜索(排序)树 的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.
学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!
相关文章推荐
【数据结构】什么是线性表?
【数据结构】线性表的链式存储结构
【数据结构】什么是栈?
【数据结构】什么是队列?
【数据结构】什么是堆?