首页 > 其他分享 >学习笔记——二叉平衡树(BST)

学习笔记——二叉平衡树(BST)

时间:2024-07-11 12:40:46浏览次数:7  
标签:左子 cnt BST 元素 笔记 二叉 节点

二叉平衡树(BST)

BST 是一种数据结构,用于快速查找数据。

二叉平衡树有一个非常明显的特性:对于每一个节点 \(u\),在其左边的数都比它小,在其右边待数都比它大。

每个点都有一个权值 cnt,用于存储这个数出现了几次。

在二叉平衡树上的每一个操作的时间与其树高成正比,约为 \(O(\log n)\)。

BST的基本操作

插入

根据二叉平衡树的性质,新加入的数分为以下几种情况:

  • 比当前节点小,则将他下放到左儿子。
  • 等于这个节点,则将这个节点的 \(cnt+1\)。
  • 否则则下放到右儿子。

最后如果没有节点就新建一个节点,并且根据大小关系归在父亲节点的左或右儿子,将节点的 \(cnt\) 设为 \(1\)。

删除

和插入是相反操作,规则同插入操作,但当等于当前结点值的时候,要分两种情况:

  • 当前结点的 \(cnt\) 值\(>1\),即当前节点存在不止一个数,直接将 \(cnt-1\) 即可。
  • 当前结点 \(cnt\) 为 \(1\),即只有一个这样的节点,这时候如果这个点是叶子节点(下面没有儿子,直接将这个点的 \(cnt\) 设成 \(0\),编号直接删除。如果这个节点下面还有儿子,就把下面两个元素中的任意一个元素所有变量赋值到这个位置,并且递归删除下面的点,操作同上。

查找排名为 \(x\) 的元素

根节点的排名取决于左子树的大小。

  • 当左子树大小大于等于 \(x\),则这个元素位于左子树
  • 当左子树大小位于 \([x-cnt, x-1]\) 之间,则这个元素位于根节点
  • 否则,这个元素位于右子树

查找元素 \(x\) 的排名

相当于搜索 \(x\),在遍历右子树时需要加上左子树以及根节点的大小。

BST 的时间复杂度约为 \(O(\log n)\),但是由于其特殊的性质,最坏情况下可以退化成一条链,这时候,复杂度将会退化成 \(O(n)\),有超时风险。这时候就需要优化,优化方法有 Treap 和 Splay 等。

标签:左子,cnt,BST,元素,笔记,二叉,节点
From: https://www.cnblogs.com/ylc666/p/18295924

相关文章

  • 【笔记】mysql主从复制
    数据的读写都放在一台数据库上会导致该数据库压力过大,且如果此数据库损坏丢失无备份会造成损失故:设置两台(这里以两台为例)主数据库负责写入从数据库负责读取从数据库从主数据库那里取数据进行数据同步开干!(一)在VM准备好两台虚拟机创建虚拟机真的很简单选择典型之后......
  • DP优化 笔记(harryzhr)
    DP优化数据结构优化单调队列优化CF372CWatchingFireworksisFun简单DP题,推柿子,然后套单调队列。SCOI2010股票交易可买可卖,所以状态不能钦定买还是卖,尽量让状态简单一点可以是优化更简单,只是转移分讨更多,设\(f[i][j]\)表示第\(i\)天结束时,有\(j\)股票时的最......
  • Linux学习笔记(03)——C编程入门
    vim编辑器需要先安装:sudoapt-getinstallvim使用vimxxx.txt:打开文件一般模式(指令模式):默认模式编辑模式:一般按下“a”进入编辑,按下ESC键可退出编辑模式命令行模式(底行模式):先进入一般模式,后输入:/?任意一个进入保存退出:进入底行模式,下面会出现:可在:后输入x保......
  • [笔记]网络原理3 - 传输层及其相关协议
    1.传输层中的一些基本概念TCP和UDP的一些区别UDP的数据格式,伪首部是固定的12bytes,源IP为017,也是固定表示UDP的。伪首部仅仅是用来计算校验和,不会传给网络层。源端口/目标端口:就是平时用到的port。源端口是临时开启的随机端口,目标端口有一些常用端口号如下图UDP......
  • [笔记]网络原理2 - 互连模型,物理层,数据链路层,网络层及其相关协议
    1.五层模型层层叠加,层层封装2.数据链路层中的一些概念MTU:最大传输单元,每一种数据链路层协议都规定了最大能传送的帧的数据长度上限,以太网的MTU最大为1500bytes,最小为64bytes。数据链路层会在数据包的左边(帧开始/结束符)右边(帧开始/结束符)都封装一些东西,封装成帧。......
  • [笔记]网络原理1 - 集线器,交换机,网关,路由器
    1.一些零散的知识记录OSI七层模型:应表会传网数物TCP/IP五层模型:应传网数物TCP/IP四层模型:应传网+网络接口特定格式,在常用五层模型里面物->电信号(Bits,比特流,有一些类似时钟信号的数据流传输);数据链路->MAC地址(Frames,帧);PPP(路由器之间)协议,CSMA/CD(hub,设备间)协议;网......
  • [笔记]网络原理4 -应用层及其相关协议
    1.常见的协议HTTP/HTTPSFTP,文件传输DHCP,动态主机配置DNS,域名系统2.DNS,DomainNameSystem域名的出现是因为IP不好记,而且不能表达组织/公司的名字和性质。市面上的网页虽然是域名访问,但是实际还是要靠IP,毕竟服务器过路由器只能通过IP。域名申请注册的一个链接DNS......
  • 入门的第一课-随笔记录
    Markdown学习标题一级标题:#+空格+标题名称二级标题:##+空格+标题名称三级标题:###+空格+标题名称(最多支持六级标题)字体Hello,World!字体两边各加两个*成为粗体Hello,world!字体两边各加一个*成为斜体Hello,World!斜体加粗则是两边各加三个*9.99两边加两个~则......
  • Linux学习笔记(02)——文件相关知识
    文件系统结构/bin存放二进制可执行文件,这些命令在单用户模式下也能够使用。可以被root和一般的账号使用。/bootUbuntu内核和启动文件,比如vmlinuz-xxx。gurb引导装载程序。/dev设备驱动文件/etc存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址。/h......
  • 线段树分治学习笔记
    线段树分治是一种通过线段树维护时间轴,实现一些可撤销的信息维护问题的手段。线段树分治是离线算法。具体地,对于若干个修改与询问,按照时间戳像区间修改一样挂在线段树的节点上,然后遍历整棵线段树,将节点上的操作计入贡献,对于一个时间戳为\(t\)的询问,线段树上区间\([t,t]\)即......