首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeScript实现AVL与红黑

本文将详解两种自平衡AVL和红黑并用TypeScript将其实现,欢迎各位感兴趣的开发者阅读本文。...写在前面 本文讲解的两种自平衡均基于二叉搜索实现,对二叉搜索不了解的开发者请移步: TypeScript实现二叉搜索 AVL自平衡 AVL(Adelson-Velskii-Landi )是一种自平衡二叉搜索...实现思路 AVL是一颗二叉搜索,因此我们可以继承二叉搜索,重写二叉的部分方法即可。...AVL的术语 在AVL中插入或移除节点和二叉搜索完全相同,然而AVL的不同之处在于我们需要校验它的平衡因子,根据平衡因子来判断是否需要调整,接下来我们就来看下AVL的相关术语: 节点的高度和平衡因子...上面我们实现AVL,我们在向AVL中插入或移除节点可能会造成旋转,所以我们需要一个包含多次插入和删除的自平衡,红黑是比较好的。插入或删除频率比较低,那么AVL比红黑更好。

45710
您找到你想要的搜索结果了吗?
是的
没有找到

AVL 旋转及 JS 实现,平衡支棱起来~

AVL旋转 在 AVL 中,增加和删除元素的操作则可能需要借由一次或多次 旋转,以实现的重新平衡。 所以,AVL最核心操作就是“AVL 旋转”!...以下 GIF 演示了不断将节点插入AVL时的情况,包含: 左旋(Left Rotation) 右旋(Right Rotation) 右左旋转(Right-Left Rotation) 左右旋转(Left-Right...因此,删除操作的时间复杂度为O(logN)+O(logN)=O(2logN); JS 实现 左单旋: function roateLeft(AvlNode) { var node =...AvlNode.left = roateRight(AvlNode.left); // 对左子节点做右单旋 return roateLeft(AvlNode); // 做左单旋 } 复制代码 获取高度的函数...leftHeight : rightHeight) + 1; } } 复制代码 实现平衡的函数: function balance(node) { if (node == null

2K00

【五一创作】|【C++】AVL实现

1.AVL概念 二叉搜索虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索将退化为单支,查 找元素相当于在顺序表中搜索元素,效率低下, 所以在此基础上提出解决办法: 当向二叉搜索中插入新节结点时...,如果能保证每个节点的左右子树高度之差的绝对值超过1即可降低高度,从而减少平均搜索长度 AVL又称平衡二叉搜索 2....AVL性质 AVL的性质: 1.它的左右子树都是AVL 2.左右子树高度之差(平衡因子)的绝对值超过1(1/0/-1) 平衡因子=右子树高度-左子树高度 3.AVL实现实现结构与插入功能时...的实现前半部分与二叉搜索的insert实现大部分相同 ---- parent的右子树连接新节点为例,出while循环后,需要反向链接父节点,而此时的父节点就为刚才记录cur前一个节点的parent...--- 在height函数中,求出其左右子树高度,并返回左右子树高度大的加1 即当前高度 ---- 在_isbalance函数中,通过左右子树高度差的绝对值 ,判断是否为平衡 ,即 高度超过

17830

AVL和红黑(map和set的底层实现

一棵AVL或者是空,或者是具有以下性质的二叉搜索: 它的左右子树都是AVL 左右子树高度之差(简称平衡因子)的绝对值超过1(-1/0/1) ?...如果一棵二叉搜索高度平衡的,它就是AVL。如果它有n个结点,其高度可保持在 O(logN),搜索时间复杂度O(logN )。...AVL的验证 AVL是在二叉搜索的基础上加入了平衡性的限制,因此要验证AVL,可以分两步: 验证其为二叉搜索 如果中序遍历可得到一个有序的序列,就说明为二叉搜索 验证其为平衡 每个节点子树高度差的绝对值超过...AVL的性能 AVL是一棵绝对平衡的二叉搜索,其要求每个节点的左右子树高度差的绝对值都不超过1,这样可以保证查询时高效的时间复杂度,即 。...AVL更优,而且红黑实现比较简单,所以实际运用中红黑更多。

1K10

【C++进阶】AVL的模拟实现(附源码)

AVL的性质: 它的左右子树都是AVL 左右子树高度之差(简称平衡因子)的绝对值超过1(-1/0/1)(右子树-左子树) 上图就是一个AVL,每个节点上的数字为这个节点的平衡因子,绝对值超过1...; 如果一棵二叉搜索高度平衡的,它就是AVL。...如果它有n个结点,其高度可保持在 O(log N),搜索时间复杂度O(logN)。 接下来让我们来模拟实现AVL。...有两种方法可以模拟实现AVL: 使用平衡因子控制高度 使用高度函数控制高度 本文将采用平衡因子的方法控制高度。...二.AVL的模拟实现 AVL的节点 这里我们使用三叉链的结构,便于找到父节点 左指针(_left) 右指针(_right) 父指针(_parent) 平衡因子(balance factor,简写 _

10710

用js来实现那些数据结构14(02-AVL

所以,我们需要另外一种来解决这样的问题,那就是自平衡二叉搜索--Adelson-Velskii-Landi(AVL)。什么意思呢?就是说这种树的任何一个节点左右两侧子树的高度之差最多为1。...平衡因子的计算是来自于每个节点的右子树高度(hr)和左子树高度(hl)的差值, 该值应为0,1,-1.如果不是这三个值,那么说明需要平衡该AVL。这就是平衡因子的简单计算方式。什么意思呢?    ...卖关子了,但是我真的希望大家想一想,因为这很必要也很重要。     好吧,我开始回答第一个问题。其实在前一篇实现中是不允许重复的值出现的,我们可以去看一下上一篇的代码,如果相等则会覆盖。...那么可能有人会问,我想要这棵存储重复的值(当然其实这种情况出现的话大多数都是你的设计有问题。。。没有唯一标识了啊......需求还怎么实现)。...这里十分重要,直接关系到你是否理解了AVL的旋转。

1.2K40

用js来实现那些数据结构14(02-AVL

所以,我们需要另外一种来解决这样的问题,那就是自平衡二叉搜索–Adelson-Velskii-Landi(AVL)。什么意思呢?就是说这种树的任何一个节点左右两侧子树的高度之差最多为1。...平衡因子的计算是来自于每个节点的右子树高度(hr)和左子树高度(hl)的差值, 该值应为0,1,-1.如果不是这三个值,那么说明需要平衡该AVL。这就是平衡因子的简单计算方式。什么意思呢?   ...卖关子了,但是我真的希望大家想一想,因为这很必要也很重要。     好吧,我开始回答第一个问题。其实在前一篇实现中是不允许重复的值出现的,我们可以去看一下上一篇的代码,如果相等则会覆盖。...那么可能有人会问,我想要这棵存储重复的值(当然其实这种情况出现的话大多数都是你的设计有问题。。。没有唯一标识了啊……需求还怎么实现)。...这里十分重要,直接关系到你是否理解了AVL的旋转。

41010

奈学:红黑(RedBlackTree)的概述

AVL与红黑   AVL是一种自平衡的二叉查找,又称平衡二叉AVL用平衡因子判断是否平衡并通过旋转来实现平衡,它的平衡的要求是:所有节点的左右子树高度超过1。...红黑的定义 AVL的定义如下: 它一定是一棵二叉排序; 它是一棵空或它的左右两个子树的高度差的绝对值超过1,并且左右两个子树都是一棵平衡二叉,递归定义。...因此可以推算出:红黑从根到叶子节点的最长的路径不会比于最短的路径的长超过两倍。红黑是一种弱平衡二叉,在相同的节点情况下,AVL高度<=红黑。 红黑高度最坏情况下为2log(N+1)。...AVL的应用: Windows NT内核 红黑的应用: JDK1.8及之后版本的Map实现,比如HashMap、TreeMap。 广泛用于C++的STL中,map和set都是用红黑实现的....著名的linux进程调度Completely Fair Scheduler,用红黑管理进程控制块,进程的虚拟内存区域都存储在一颗红黑树上,每个虚拟地址区域都对应红黑的一个节点,左指针指向相邻的地址虚拟存储区域

1.3K00

用 rust 实现 llvm 源码中的可持久化 AVL :ImmutableMap

2 的 AVL [2]: ImmutableSet is an immutable (functional) set implementation based on an AVL tree....ImmutableSet 是基于 AVL 的不可变(功能)集实现。添加或删除元素是通过 Factory 对象完成的,并导致创建新的 ImmutableSet 对象。...rust 的所有权模型实际上非常适合写这种不可变数据结构,比可变的 AVL tree 实现起来要方便和直观地多。另外,使用引用计数智能指针虽然会带来一些额外的开销,但实际上极大地减轻了内存管理的压力。...借由 RC 甚至可以把它当成可变 AVL 来使用,比如: let map = ImmutableMap::new(); let map = map.insert(1, "abc"); let map...类型定义 先来看看类型实现的定义: AVL 树节点: type AvlTreeImpl = Option>>; #[derive(Clone, Debug)] struct

42220

平衡二叉的数据结构_红黑数据结构

当然,还有一些更好的,但实现起来更复杂的数据结构,能够做到一步旋转之内达到平衡,但红黑能够给我们一个比较“便宜”的解决方案。...平衡二叉AVL中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡。...AVL的定义: 一棵AVL满足以下的条件: 1>它的左子树和右子树都是AVL 2>左子树和右子树的高度差不能超过1 性质: 1>一棵n个结点的AVL的其高度保持在0(log2...为了保证平衡,AVL中的每个结点都有一个平衡因子,它表示这个结点的左、右子树的高度差,AVL树上所有结点的平衡因子值只能是-1、0、1。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

29320

Java 中 HashMap 数据结构分析(语言无关)

HashMap 用到的数据结构: 数组:查询快,插入和删除慢,底层实现依赖操作系统,在一块连续内存空间内,存储数据。...2、AVL与红黑 它能保持二叉高度平衡,尽量降低二叉高度,减少的平均查找长度。...2.1、AVL AVL的性质: 左子树与右子树高度之差的绝对值超过1; 的每个左子树和右子树都是AVL; 每一个节点都有一个平衡因子(balance factor),任一节点的平衡因子是...-1、0、1(每一个节点的平衡因子 = 右子树高度 - 左子树高度)。...2.3、红黑的性质 红黑的性质: 红黑是一棵二叉搜索,它在每个节点增加了一个存储位记录节点的颜色,可以是 RED ,也可以是 BLACK ;通过任意一条从根到叶子简单路径上颜色的约束,红黑保证最长路径超过最短路径的二倍

65920

C++进阶:AVL详解及模拟实现(图示讲解旋转过程)

1(需要对中的结点进行调整),即可降低高度,从而减少平均搜索长度 1.1概念介绍 AVL定义: 解释AVL是一种自平衡的二叉搜索,由G.M....强调AVL中每个节点的平衡因子(Balance Factor),即左子树高度和右子树高度之差超过1。 平衡因子: 解释平衡因子的概念,即一个节点的左子树高度减去右子树高度的值。...提及AVL的平衡因子限制,确保高度保持在对数级别。 1.2核心性质 严格平衡: 强调AVL的严格平衡性质,即每个节点的左右子树高度超过1。...right + 1 : left + 1; } 这段代码实现AVL 高度计算和平衡性检查功能。 _Height 函数: 这个函数用于计算给定高度。...它调用 _IsBalance 函数并传入根节点,返回整棵 AVL 是否平衡的结果。 这些函数的实现AVL 的重要部分,用于确保 AVL 保持平衡性和正确性。

13010

C++【AVL

,如果能保证每个结点的左右子树高度之差的绝对值超过1(需要对中的结点进行调整),即可降低高度,从而减少平均搜索长度 这两位天才提出的 二叉搜索 解决方案十分巧妙,通过一个 平衡因子 bf 反映每一个节点中左右子树的高度情况...,如果其中一方高度过高时(失衡,可能退化),就会通过 旋转 的方式降低高度,有效的避免了退化 如果 二叉搜索 中节点具备以下性质 它的左右子树都是 AVL 左右子树的高度之差(平衡因子)的绝对值超过...1 那么它就是一棵 AVL 注意: AVL 是一棵高度平衡的二叉搜索,如果它有 N 个节点,那么它的高度可以保持在 logN 左右,时间复杂度为 O(logN) 1.1、AVL的定义 AVL...,导致一直 旋转 至 根 的位置(旋转比较浪费时间) AVL 性能很优秀,如果在存储大量不需要修改的静态数据时,用 AVL 是极好的,但在大多数场景中,用不到这么极限的性能,此时就需要一种 和 AVL...AVL ,然后对其进行了实现AVL 光是一个 插入 操作,就已经涉及了 四大旋转情况,其中每种情况都需要自己画图分析,AVL 存储静态数据的理想容器,如果想追求性价比,可以选择 红黑 RB-Tree

11420

会旋转的,你见过吗?

那链表查询数据的时间复杂度牛牛就不用多说了吧.答案: O(n) 示例: 目录 前言 一、AVL的介绍 二、AVL的模拟实现 结点类 AVL的框架: 2.1 "插入"操作(重点) ①:右旋 (1...: 2.2 中序遍历: 2.3 AVL的"高度" 2.4 验证AVL 结语 一、AVL的介绍 AVL是一种自"平衡二叉搜索",它的每个节点存储一个关键字,具有以下特点: 每个节点的左右子树高度差至多为...1,也就是说,AVL的任何一个节点的左右子树高度超过1。...(也就是满足二叉搜索的性质) 如果我们定义 平衡因子=右子树的高度-左子树的高度中每个结点的平衡因子的绝对值 超过1 即可以为( 1 0 -1三种) 1:表示右子树比左子树高. 0:...AVL,平衡因子是右子树高度—左子树高度.

10310
领券