STL源码刨析:树的导览

16 篇文章 0 订阅
10 篇文章 0 订阅

目录

        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.双旋转


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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wild_Pointer.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值