STL源码刨析:树的导览

news2025/1/12 12:10:12

目录

        1.前言

        2.关联式容器

        3.二叉搜索树

        4.平衡二叉搜索树


前言

        在阅读了STL源码刨析系列的前几章,我们可以知道容器分为序列式容器和关联式容器。在前几个小节中,我们对序列式容器中的vector和list容器进行了讲解,并比较了vector和list的区别。本章将对红黑树进行讲解记录,并以此引出set和map容器。


关联式容器

        所谓关联式容器即是存储的数据都存在一个键值(Key)和一个实值(Value),当元素被插入到关联式容器中时,容器内部的结构便会依照键值的大小,以某种特定规则将这个元素放置于适当的位置


二叉搜索树

        二叉树,想必大家在学习过数据结构后都有所耳闻。其二叉树即是任意一个节点最多只允许存在两个子节点。而二叉搜索树便是在二叉树的基础上,新增了一条规则:任意节点的键值一定大于左子树中的每一个节点的键值,并小于右子树中每一个节点的键值

        

图1.二叉搜索树示例

        在简单了解二叉搜索树后,我们还需要对二叉搜索树的节点插入操作和删除操作进行简单的演示

图2.二叉搜索树节点插入操作

图3.二叉搜索树节点删除操作1

图4.二叉搜索树节点删除操作3


平衡二叉搜索树

        平衡二叉搜索树是由于二叉搜索树在进行插入或删除操作的时候,导致二叉搜索树的左子树和右子树的层数相差大于1。而所谓的“平衡”即是树中的左子树和右子树相差的层数小于大于1,即为平衡,可参考下图:

图5.平衡二叉搜索树示例

        在了解了什么是平衡二叉搜索树之后,我们将需要认识到在对于一个不平衡的二叉搜索树时,我们需要如何操作使其平衡?此时我们便需要引入一个名词——“旋转”。而旋转的方式分为两种,一种是单旋转,另一种是双旋转。单旋转应对的是外侧插入节点,双旋转应对的是内侧插入节点,具体如下:

图6.四种“平衡破坏”情况

        在了解了四种平衡被破坏的情况后,我们需要了解单旋转和双旋转是如何对这四种平衡被破坏的情况进行转换,将不平衡状态转为平衡状态:

        1.单旋转 

图7.单旋转

        2.双旋转

图8.双旋转


        本章节只是简单的回顾了一下二叉搜索树和平衡二叉搜索树的内容,具体关于关联式容器中的红黑树将单独作为一个小节进行讲解

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习记录——day24 多线程编程

目录 多线程局部概念 线程支持函数(多线程编程) pthread_create:创建线程 pthread -self:线程号获取 pthread_exit:线程退出函数 pthread_jion:线程资源回收 pthred_detath:线程分离态 p…

检索增强生成(RAG):智能内容生成的新纪元

引言 在大 AI 时代,生成式人工智能(GenAI)模型,尤其是大型语言模型(LLM),已经展现出了令人瞩目的能力。然而,这些模型在提供信息的准确、即时、专业、权威等方面仍存在局限。检索增…

1.2、安装k8s-node1 和 k8s-node2节点虚拟机

k8s-master节点的虚拟机环境弄好之后,这小节继续介绍k8s-node1 和 k8s-node2节点虚拟机环境安装。 节点主机名ip主节点k8s-master172.31.0.10节点1k8s-node1172.31.0.11节点2k8s-node2172.31.0.12 在D:\vagrant目录下新建centos_stream_9_node1文件夹,然…

如何在Python中使用网页抓取API获得Google搜索结果

SERP是搜索引擎结果页的缩写,它是你在百度、谷歌、Bing等搜索引擎中提交查询后所得到的页面。搜索引擎需要给所有页面做排序,把最能解决我们需求的页面展示给我们,企业会非常关注结果页的排序,也就是本企业内容的自然排名情况。手…

革新IT架构管理,宝兰德全新中间件统一管理平台助力企业数字化转型

近期,宝兰德在金融行业科技盛会“2024中国国际金融展”上正式发布了拳头产品「中间件统一管理平台MCP2.0」,旨在推动业务与中间件解耦,解决中间件管理中的版本不统一、自动化程度低、监控不完善、运维效率低、管理分散等问题,实现…

8月1日学习笔记 java环境安装以及tomcat配置

一,java环境安装 1. 效果 2. 步骤 1. 下载 jdk22 # 官网地址 https://www.oracle.com/cn/java/technologies/download s/ wget https://download.oracle.com/java/22/latest/jdk- 22_linux-x64_bin.tar.gz 2. 解压 tar -zxvf jdk-22.2.tar.gz 3. 移动到 us…

快速搞定分布式Kafka

本文从kafka中的实际应用场景分析,讲述kafka的一些基本概念。再讲述zookeeper集群环境的构建;kafka的搭建以及脚本文件编写;最后是一个快速入门的demo.内容会比较多,希望大家能有所收获! 1.Kafka(MQ)实战应用场景剖析…

linux系统ShellCheck检查shell脚步语法正确的工具

目录 ShellCheck 安装ShellCheck 、dnf、yum 源代码编译 步骤如下: 示例命令: 方法三:使用其他第三方仓库、COPR 仓库 假设 ShellCheck 输出如下: 分析输出 修改脚本 再次运行 ShellCheck 1. Shell 脚本最佳实践 主题…

vcpkg install libtorch[cuda] -allow-unsupported-compiler

在vcpkg中不懂如何使用 nvcc 的 -allow-unsupported-compiler, 所以直接注释了CUDA中对版本的检查代码. C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include\crt\host_config.h 奇了怪了,我是用的是vs2022,但是还是被检查为不支持的编译器!!! 可以试一下改这…

搭建gitlab代码托管仓库(解决centos7无法使用默认数据源问题)

公司的gitlab由于停电,又崩了,每次停电都会崩掉。所以就想到自己学一下搭建gitlab代码中心,后面在搞一个jenkins自动发版学习一下,慢慢搞吧。 在弄的时候,发现Centos7居然在2024年6月31日停止维护了。这就离谱了&…

职教国培丨高职教师数据分析与挖掘课程实施能力提升培训班莅临泰迪智能科技参观调研

7月28日,由广东机电职业技术学院牵头,广东泰迪智能科技股份有限公司为合作单位的“2024年高职教师数据分析与挖掘课程实施能力提升培训班”老师莅临广东泰迪智能科技股份有限公司产教融合实训基地参观调研,来自广东省各地36位高校教师参与本次…

如何在 Kali Linux 上安装和使用 Docker 和 Docker Compose

Docker 和 Docker Compose 是现代开发者必备的工具,特别是当你需要在不同的环境中部署应用时。本文将详细介绍如何在 Kali Linux 上安装 Docker 和 Docker Compose,并使用它们启动服务。即使你是个技术小白,也能轻松跟随这篇指南完成操作。 …

Ecovadis认证:企业申请Ecovadis认证条件

Ecovadis认证是一种用于评估和评价企业可持续发展绩效的认证体系。该认证由Ecovadis公司提供,目的是帮助公司了解和改善其环境、社会和治理(ESG)实践。 Ecovadis认证主要基于四个方面进行评估:环境、劳工和人权、道德采购以及可持…

Python——记录pip问题(解决下载慢、升级失败问题)

在python开发中,经常需要使用到各种各样的库。 pip又是我们常用的安装工具。但是国外的源下载速度实在太慢,经常导致超时。 有很多朋友刚刚学Python的时候,会来问为什么pip下载东西这么慢啊? 而且pycharm里面下载库也是非常的慢…

Linux服务器安装MySQL8.0

序号类型地址1MySQLLinux(centos 7.5)服务器安装MySQL5.72MySQLLinux服务器安装MySQL8.03MySQLMySQL操作之概念、SQL约束(一)4MySQLMySQL操作之数据定义语言(DDL)(二)5MySQLMySQL操作之数据操作…

React三原理和路由

代码下载 React 组件通讯原理 setState() 说明 setState() 是异步更新数据的,使用该语法时,后面的 setState() 不要依赖于前面的 setState(),可以多次调用 setState() ,只会触发一次重新渲染: this.setState({ coun…

CPQ报价管理系统 | 成本报价CPQ解决方案

一、成本报价流程现状 1、传统流程 2、业务痛点 ①、数据手工重复输入环节多、易错,为保障准确性需多次复核,影响报价效率 ②、原材波动较大,但是当前询价流程只有一次性,原材成本发生变化,无法及时更新变化提醒报价…

类和对象(作业篇)

简简单单整理一下咱们的小作业,这次的作业比较简单,只有选择题: public class Test{private float f1.0f;int m12;static int n1;public static void main(String args[]){Test tnew Test();} }A:抛开private不说,先看…

解析顺序表【数据结构】

1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有线序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就是说是连续的一条线…

HTML 字符集详解及示例

文章目录 摘要引言从ASCII到UTF-8的演变ASCII 字符集ANSI字符集ISO-8859-1字符集UTF-8字符集 示例代码运行Demo小结表格总结未来展望参考资料 摘要 本文介绍了HTML中的字符集演变历史,从最初的ASCII到现代的UTF-8,并提供了设置字符集的示例代码。文中涵…