二叉排序树——每个节点的左子树中的键值小于节点的键值,右子树中的键值大于节点的键值

二叉排序树(Binary Search Tree,简称BST),也称为二叉查找树或二叉搜索树,是一种特殊的二叉树,具有以下主要特点:

  1. 节点的排序规则

    • 每个节点包含一个键及其关联的值。
    • 对于树中的任意节点X,其左子树中的所有节点的键都小于节点X的键
    • 对于树中的任意节点X,其右子树中的所有节点的键都大于节点X的键
  2. 动态数据结构

    • 二叉排序树是一个动态数据结构,可以在维护其排序特性的同时,允许插入和删除节点。
  3. 查找效率

    • 在平衡的二叉排序树中,查找效率较高,时间复杂度为O(log n),其中n是树中节点的数量。不过在最坏的情况下(如树退化成链表),查找效率会降低到O(n)。
  4. 中序遍历有序

    • 对二叉排序树进行中序遍历(左子树—根节点—右子树)将得到一个有序的节点序列。
  5. 用途广泛

    • 由于其查找、插入和删除操作的效率,在很多情况下都非常有用,如在实现映射(Map)和集合(Set)数据结构中。
  6. 不一定是平衡的

    • 标准的二叉排序树不自动保证树的平衡,因此可能需要额外的算法或数据结构(如AVL树、红黑树)来保证操作的效率。

例题:

  利用逐点插入建立序列(50,72,43,85,75,20,35,45,65,30)对应的二叉排序树以后,要查找元素 30 要进行几次元素间的比较?

 

  要确定查找元素30在二叉排序树中需要进行多少次比较,首先需要根据给定的序列建立二叉排序树。序列是:50,72,43,85,75,20,35,45,65,30。

我们按照序列逐点插入的方式来建立二叉排序树:

  1. 插入50,它成为根节点。
  2. 插入72,它比50大,放在50的右子节点。
  3. 插入43,它比50小,放在50的左子节点。
  4. 插入85,它比50大,也比72大,放在72的右子节点。
  5. 插入75,它比50大,比72大,但比85小,放在85的左子节点。
  6. 插入20,它比50小,也比43小,放在43的左子节点。
  7. 插入35,它比50小,比43小,但比20大,放在20的右子节点。
  8. 插入45,它比50小,比43小,比20大,也比35大,放在35的右子节点。
  9. 插入65,它比50大,比72小,放在72的左子节点。
  10. 插入30,它比50小,比43小,比20大,比35小,放在35的左子节点。

现在,查找元素30的过程是:

  1. 与根节点50比较,30小于50,向左走。
  2. 与左子节点43比较,30小于43,向左走。
  3. 与43的左子节点20比较,30大于20,向右走。
  4. 与20的右子节点35比较,30小于35,向左走。
  5. 与35的左子节点30比较,找到目标。

因此,总共进行了5次比较。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/554595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓投屏延时数据如何测试,测试工具如何写?

背景: 投屏其实在android等使用场景非常非常多,比如现在火爆小米汽车的车机,上面涉及到手机和车机互联画面相关都是属于投屏范围。这种跨设备的投屏场景,流畅的体验是最重要的,这里就会要求投屏中最重要的一个性能指标…

Nerf技术原理

Neural Radiance Fields (NeRF) 是一种3D场景重建技术,用于从一组稀疏的2D图像创建高质量的3D模型。这一技术基于深度学习,通过训练一个神经网络来模拟场景的体积密度和颜色分布,实现在新的视角下渲染出高质量的3D图像。 NeRF的核心原理 NeRF的核心在于使用一个全连接的神经…

开源事件通知库libevent及网络连接管理模块bufferevent详解

目录 1、libevent介绍 1.1、什么是libevent? 1.2、libevent特点 1.3、网络连接管理模块bufferevent 2、bufferevent有什么用? 3、bufferevent的整体设计与实现细节 3.1、整体概况 3.2、evbuffer与bufferevent 3.3、defer callback 4、bufferev…

听说英伟达和诺和诺德要共建医药研发超算,超算安腾默默笑了

继黄仁勋公开发表“生命科学才是未来”的观点后,英伟达押注生物计算赛道又有新动作。日前,诺和诺德基金会宣布将出资和英伟达合作,在丹麦建造一台专注于生成式AI应用的超级计算机,以推动医疗保健、生命科学和绿色转型领域的研究与…

【JavaSE进阶】08-反射机制 09-注解

1 反射机制 a) 反射的基本概念 b) Java中的类反射 c) 安全性和反射 d) 反射的两个缺点 1.1 反射的基本概念 反射的概念是由 Smith 在 1982 年首次提出的,主要是指程序可以访问、检测和修改它本身状 态或行为的一种能力, 并能根据自身行为的状态和结果&#…

六、项目发布 -- 2. 数据库环境准备

之前我们是采用mock方式获取这些接口,也就是这些接口的数据其实是固定的,现在我们将从数据库中来获取这些数据并且在界面上进行展示。 1、数据库环境准备 到MYSQL官网上,主要下载服务端,社区版是免费的,安装好MYSQL …

结构体(C语言)

“点赞,留言,收藏,关注” 就是对阿林最大的支持 1.自定义类型 什么是自定义类型?C语言中有一些自带的数据类型,比如说char,int,float,double,long等数据类型就是C语言的…

目标检测——标注鱼类数据集

一、重要性及意义 鱼类的检测在多个领域都表现出其重要性和意义。以下是几个主要方面的阐述: 首先,从食品安全和营养价值的角度来看,鱼类作为人们日常生活中的重要蛋白质来源,其质量和安全性备受关注。鱼类营养成分检测能够评估…

C++异步回调示例:多线程执行任务,主线程通过回调监测任务状态

1、回调函数 回调函数定义:把函数的指针或者地址作为参数传递给另一个参数,当这个指针被用来调用其所指向的函数时,那么这就是一个回调的过程,这个被回调的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而…

反转二叉树(力扣226)

解题思路:用队列进行前序遍历的同时把节点的左节点和右节点交换 具体代码如下: class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root NULL) return root;swap(root->left, root->right); // 中invertTree(root->left)…

oracle 数据库 迁移 mysql

将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。下面是一个基本的迁移步骤,供你参考: 步骤一:评估和准备工作 1.评估数据库结构:仔细分析 Oracle 数据库的结构…

让15万的车也配激光雷达,速腾发布中长距「千元机」MX

‍作者 |老缅 编辑 |德新 4月15日,国内头部激光雷达公司速腾聚创发布了新一代中长距激光雷达MX。 相比较其产品配置,最令人惊喜的是它的价格。 「MX将以低于200美元的价格作为基础,实现第一个项目的量产。」速腾聚创CEO邱纯潮在发布会现场…

Python连接Oracle数据库问题解决及Linux服务器操作知识

背景说明 最近在做一个视频分析的项目,然后需要将视频分析的数据写入到oracle数据库,直接在服务器上测试数据库连接的时候出现了这个bug提示,自己通过不断的研究探讨,最终把这个问题成功进行了解决,在这里进行一下记录…

Avi Wigderson:理论计算机科学的巨人

🏆个人专栏 🤺 leetcode 🧗 Leetcode Prime 🏇 Golang20天教程 🚴‍♂️ Java问题收集园地 🐍 Python工具 🌴 成长感悟 欢迎大家观看,不执着于追求顶峰,只享受探索过程 A…

LeetCode-热题100:98. 验证二叉搜索树

题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#x…

Java项目:基于SSM框架实现的心遗非遗文创电商平台(源码+数据库)

一、项目简介 本项目是一套基于SSM框架实现的心遗非遗文创电商平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

Linux_CentOS7/8系统 - 关闭图形界面新增用户机制手册

Linux_CentOS7/8系统 - 关闭图形界面新增用户机制手册 在系统完成图形界面安装后重新启动后第一次登入,在图形界面会有新增用户页面,那如果取消关闭可以按以下操作: CTRLALTF2 root账号登录 yum remove gnome-initial-setup -y init 3 init …

微信小程序公共组件封装使用

1.在components目录下创建公共组件,以navbar为例 2.完成组件功能 3.调用,如果很多地方都会用到,建议放全局,如果不是则放在需要引用的文件中 3.1全局引用,在app.json做全局引用配置 3.2局部引用,在需要引入…

【C++庖丁解牛】C++11---统一的列表初始化 | auto | decltype | nullptr | STL中一些变化

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. C11简介2. 统一的列表…

3.1 海思SS928开发 - 烧写工具 - ToolPlatform 安装及配置

3.1 烧写工具 - ToolPlatform 安装及配置 ToolPlatform 安装 进入到开发虚拟机,将文件 ~/hiss928/sdk/ema_2.0.2.2/pc/ToolPlatform/ToolPlatform-1.0.11-win32-x86_64.zip 拷贝至 PC 上。PC 要求安装了 win7 及以上的操作系统。解压压缩包 ToolPlatform-1.0.11-w…
最新文章