首页 > 其他分享 >STL(12) RBTREE 红黑树

STL(12) RBTREE 红黑树

时间:2023-09-15 17:46:18浏览次数:39  
标签:结点 12 STL value RBTREE 二叉树 key 红黑树 节点

目录
关联式容器:
查找快,插入快
STL中的主要代表:红黑树,hashtable

红黑树的基本原理

  1. 单个结点来看,左孩子小于根节点,右孩子大于根节点(二叉搜索树)

红黑树是什么,有什么意义:排序二叉树有不平衡的问题,可能左子树很长但是右子树很短,造成查询时性能不佳(logn退化成n),完全平衡的二叉树能保证层数平均,从而查询效率高,但是维护又很麻烦,每次插入和删除有很大的可能要大幅调整树结构。红黑树就是介于完全不平衡和完全平衡之间的一种二叉树,通过每个节点有红黑两种颜色、从节点到任意叶子节点会经过相同数量的黑色节点等一系列规则,实现了【树的层数最大也只会有两倍的差距】,这样既能提高插入和删除的效率,又能让树相对平衡从而有还不错的查询效率。从整体上讲,红黑树就是一种中庸之道的二叉树

  1. 平衡性要求并不高,并不像AVL二叉树一样要求左右高差<=1
  2. 为了提高插入效率,旋转操作更少

基本要求

  1. 每个节点要么是红色,要么是黑色
  2. 根节点和叶子结点(nil)是黑色的
  3. 如果一个结点是红色的,那么它的孩子是黑色的(不能连续两个红色)
  4. 任意节点到叶节点的树链中包含相同数量的黑色结点

变色和旋转

rbtree

红黑树是一种平衡的二分查找树

设计树的时候,最害怕的就是某一个树上过长,造成查找效率降级,所以就有这种平衡树

提供遍历的操作,ite++就能得到一个排序的状态(中序)
begin记录最左边结点,end记录最右边结点
但是,不应该通过iterator去改变元素值(key),因为会破坏红黑树的排序规则

红黑树的设计本身,并没有要求是否可以重复key值,并且提供了两种insertion操作:insert_unique()和insert_equal()
如果调用第一个并且元素重复,就会安插失败

源码G2.9

key表示关键字类型
value表示key和data合起来的类型
keyofvalue表示如何从value中取出key
compare表示如何进行key的比较

header是一个虚拟的元素,他的孩子是数根节点,会使实现容易许多

Compare key_compare中,作为一个函数,没有大小,其实是0
但对于编译器来说,实现的过程中,会有一个大小为1,
由于内存对齐,最后的结果为12
sizeof的大小 12

示例


一个实例

key value都是int,value是key和data合起来的,所以,key就是value就是data

使用identity来取出元素,用less来比较元素

2.9

4.9

treenode的构造

标签:结点,12,STL,value,RBTREE,二叉树,key,红黑树,节点
From: https://www.cnblogs.com/liviayu/p/17705594.html

相关文章

  • [ARC122E] Increasing LCMs
    [ARC122E]IncreasingLCMsAtcoder:[ARC122E]IncreasingLCMs洛谷:[ARC122E]IncreasingLCMsSolution应该意识到这题的核心思想在于构造,想办法将原问题不断划分为子问题。此题策略的证明不算太难,但以我目前的水平肯定不可能靠严密的证明做出这道题。猜,直接把满足条件的数放......
  • GYM 104128 G
    G.Inscryption根据题意,需要把输入的\(0\)全部转换为\(1\)或\(-1\),使得\(p\overq\)最大。当\(a[i]=1\)时,\({p\overq}={p'+1\overq'+1}\)当\(a[i]=-1\)时,\({p\overq}={p'\overq'-1}\)通过计算,可知当\(q>2*p+1\)时,\(a[i]=1\)时的收益大于\(a[i]=......
  • 3.12 Java直接量(字面量)
    直接量是指在程序中通过源代码直接给出的值,例如在inta=5;代码中,为变量a所分配的初始值5就是一个直接量。直接量的类型并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型和null类型。具体而言,Java 支持如下8种类型的直接量......
  • C++中STL用法汇总
    1什么是STL?STL(StandardTemplateLibrary),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++StandardLibrary)中,是ANSI/ISOC++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程......
  • Windows Server 2012 R2 Standard 安装.net 3.5
    很久没截图IIS部署了,最近临时接了一个部署任务就是在一台新的WindowsServer2012 R2 上部署一套系统,需要安装的.net3.5但是一直不成功,找了很久的资料终于有着落了,先记录下正常情况安装大概率都会出现以下问题 然后网上找寻解决方案方法一【无效】:角色添加功能里边(就......
  • 手工升级到Oracle 12C
    一、升级路线10.2.0.5,11.1.0.7,11.2.0.2以上版本可以直接升级到12c。10.2.0.5以前的版本和11.2.0.1版需要先升级到中间版本,再升级到12c。二、环境说明操作系统:RedHat8Linux64位源数据库版本:Oracle11.2.0.3目标数据库版本:Oracle12.1.0.2三、升级步骤简述备份源数......
  • 总结2011,展望2012
           首先祝愿大家新年快乐,快乐2012。       回首2011一年里和acm结缘,有幸自己能接触这项赛事中,上半年自己刷水题,参加新生赛、校赛什么的全部被虐爆了。然后不知不觉的挥霍了两个月没做什么题,到了署假,各种排位赛还是逃不了被虐的命运,各路大神碉堡了。区域赛组队......
  • ERROR OGG-01224 Oracle GoldenGate Capture for Oracle, p_lion.prm: Address al
    我的ogg版本OracleGoldenGateCommandInterpreterforOracleVersion12.3.0.1.4OGGCORE_12.3.0.1.0_PLATFORMS_180415.0359_FBOLinux,x64,64bit(optimized),Oracle11gonApr15201821:16:09OperatingsystemcharactersetidentifiedasUTF-8.报错信息2023......
  • 9.12(补)
    不知发生了什么,竟落了一天笔记,今日补上数据结构讲了链表,我并不敢相信这是我大一学过的,因为我完全没有印象,无奈只能跟着老师在复习一遍,晚上的工程经济学很有意思,讲了投资,资金方面的内容,我想这门课不止可以应用于考试,在我的生活中也会有所帮助 ......
  • 9.12日记
    成功使用HBASE实现Javaweb的增删改查packageorg.example.Servlet;importBean.Bean1;importorg.example.HbaseCRUD;importjavax.servlet.*;importjavax.servlet.http.*;importjavax.servlet.annotation.*;importjava.io.IOException;@WebServlet(name="Servletadd1",......