C++深入细致探究二叉搜索树

作者:Suk-god 时间:2021-12-31 00:09:24 

1、二叉搜索树的概念

 二叉搜索树又称二叉排序树,它可以是一颗空树,亦可以是一颗具有如下性质的二叉树:

  ①若根节点的左子树不为空,则左子树上的所有节点的值域都小于根节点的值

  ②若根节点的右子树不为空,则右子树上的所有节点的值域都大于根节点的值

  ③根节点的左右子树分别也是一颗二叉搜索树

例如下面的这棵二叉树就是一棵二叉搜索树:

C++深入细致探究二叉搜索树

注意:判定一棵二叉树是否为二叉搜索树一定要紧扣二叉搜索树的概念~

2、二叉搜索树的操作

声明:该文章讨论的是二叉搜索树中节点值唯一的情况。

二叉搜索树的查找

对于查找部分,充分利用二叉搜索树的特性,即右子树的value 大于根节点,左子树的value小于根节点。

例如:查找下图中的红色方框中的节点

C++深入细致探究二叉搜索树

以6对应的节点为列,查找过程主要经历如下几个步骤:

  ①6与根节点5比较,6 > 5,因此到5的右子树查找

&emsp;&emsp;①6与根节点7比较,6 < 7,因此到7的左子树查找

&emsp;&emsp;①6与根节点6比较,6 == 6,此时查找成功!

总结基本步骤:

若根节点不为空:

&emsp;&emsp;如果根节点的key == 查找的key----->返回true

&emsp;&emsp;如果根节点的key > 查找的key----->转到根节点的右子树查找

&emsp;&emsp;如果根节点的key < 查找的key----->转到根节点的左子树查找

否则(根节点为空了),直接返回false,表示树中不存在要查找的key

二叉搜索树的插入

主要分两大类的情况进行讨论:

1、树为空,直接插入

如下图所示:

C++深入细致探究二叉搜索树

2、树不空

①按照二叉搜索树的性质查找插入的位置

②插入新的节点

e.g:在下面的二叉搜索树中插入-1

C++深入细致探究二叉搜索树

第一步,查找插入位置:

&emsp;注意:要标记当前访问的节点的双亲,否则,就算找到了插入位置,由于无法访问其双亲,也是无法进行插入的。这里使用parent来标记当前访问节点的双亲节点。

具体过程如下图:

C++深入细致探究二叉搜索树

第二步,插入新节点

判断待插入节点(node)的值与parent标记的节点值的大小关系

if(node->value < parent->value)//新节点作为parent的左孩子
{
parent->left = node;
}
else//新节点作为parent的右孩子
{
parent->right = node;
}

来源:https://blog.csdn.net/Suk_god/article/details/124906501

标签:C++,二叉搜索树
0
投稿

猜你喜欢

  • Android使用ViewPager实现启动引导页

    2023-02-03 12:28:28
  • JAVA实现账户取款和存款操作

    2023-08-22 16:31:45
  • Fastjson 常用API介绍及下载地址(推荐)

    2023-03-18 23:48:47
  • Spring案例打印机的实现过程详解

    2023-12-02 12:28:47
  • SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分页)

    2023-09-27 01:47:32
  • C++判断pe文件实例

    2022-01-19 12:29:52
  • 史上最强C语言分支和循环教程详解

    2022-07-01 07:59:35
  • C#操作EXCEL DataTable转换的实例代码

    2022-05-18 04:25:15
  • 关于ObjectUtils.isEmpty() 和 null 的区别

    2022-05-07 17:10:56
  • 详解Android studio中正确引入so文件的方法

    2022-06-17 23:21:32
  • 利用Java代码写一个并行调用模板

    2023-07-04 16:00:39
  • Java Timezone类常见问题_动力节点Java学院整理

    2023-08-23 01:30:11
  • OpenGL绘制贝塞尔曲线

    2022-02-28 11:51:57
  • 关于工厂方法模式的Java实现

    2021-12-20 18:06:13
  • java实现新浪微博Oauth接口发送图片和文字的方法

    2023-11-29 01:43:04
  • Java Web开发环境配置详解

    2023-03-05 03:32:37
  • SpringBoot项目在IntelliJ IDEA中如何实现热部署

    2023-10-29 13:30:22
  • java新手入门——String类详解

    2022-02-23 08:17:26
  • Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

    2023-12-19 08:28:11
  • java音乐播放器编写源码

    2022-08-02 21:06:44
  • asp之家 软件编程 m.aspxhome.com