温故而知新 -> 数据结构 ->树 -> 二叉搜索树
作者:互联网
温故而知新 -> 数据结构 ->树 -> 二叉搜索树
注:若想查看二叉树相关内容,可点击 温故而知新 -> 数据结构 ->树 -> 二叉树;
若想查看其他有关数据结构知识,可点击链接 温故而知新 -> 数据结构 !
二叉树
1、概念
二叉搜索树 又称 二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:
- 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
- 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
- 它的左右子树也分别为二叉搜索树
例如将 int data[] = {4,6,13,5,8,10,12,7,11,9}
以二叉搜索树的结构去构造,结果如下
2、操作
2.1 查找
查找规则 可总结为几句话:
若根节点不为空
- 若根节点
key
== 查找key
, 返回true
- 若根节点
key
> 查找key
,在其左子树查找 - 若根节点
key
< 查找key
,在其右子树查找
若根节点为空,返回 false
!
案例如下
2.2 插入
插入的具体过程如下:
- 树为空,则直接插入
- 树非空,按照二叉搜索树性质查找插入位置,插入新节点
案例如下
2.3 删除
首先查找元素是否在二叉搜索树中,若不存在,则返回;
若存在,则要删除的结点可能分下面四种情况:
- 要删除的结点无孩子结点
- 要删除的结点只有左孩子结点
- 要删除的结点只有右孩子结点
- 要删除的结点有左、右孩子结点
虽然有待删除节点有4种情况,实际 情况1 可以与 情况2 或者 3 合并起来,因此真正的 删除过程 如下:
- 情况2:删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点
- 情况3:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点
- 情况4:在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点中,再来处理该结点的删除问题
3、实现
根据上述理论知识去依序实现二叉搜索树!
由于代码较多,所以可点击后续链接进行查看!
4、应用
4.1 K模型
K模型 即只有 Key
作为关键码,结构中只需要存储 Key
即可,关键码即为需要搜索到的值。
比如:给一个单词word,判断该单词是否拼写正确,具体方式如下:
- 以单词集合中的每个单词作为key,构建一棵二叉搜索树;
- 在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。
4.2 KV模型
每一个关键码 Key
,都有与之对应的值 Value
,即<Key, Value>
的键值对。
比如:实现一个简单的英汉词典dict,可以通过英文找到与其对应的中文,具体实现方式如下:
- <单词,中文含义>为键值对构造二叉搜索树,注意:二叉搜索树需要比较,键值对比较时只比较
Key
- 查询英文单词时,只需给出英文单词,就可快速找到与其对应的
Key
侵权删~
标签:温故而知新,结点,删除,二叉,查找,搜索,数据结构,节点 来源: https://blog.csdn.net/m0_51961114/article/details/122777852