avl-tree相关内容

什么时候选择RB树、B-Tree或AVL树?

作为程序员,我什么时候应该考虑使用 RB 树、B 树或 AVL 树?在决定选择之前需要考虑哪些关键点? 有人可以为每个树结构解释一个场景,为什么会参考关键点选择它而不是其他树结构吗? 解决方案 加点盐: 当您管理超过数千个项目并从磁盘或某些慢速存储介质对它们进行分页时,请使用 B 树. RB 树,当您在树上进行相当频繁的插入、删除和检索时. 当您的插入和删除相对于您 ..
发布时间:2022-01-05 19:03:38 其他开发

AVL 二叉树 - 平衡测试

我正在尝试测试一棵树是 AVL 树还是不使用 prolog. 我已经做了一个高度测试,适用于我迄今为止所做的测试,但我的平衡测试仍然不强. 这是我目前的工作: avl('Branch'(LeftBranch,RightBranch)) :-高度(左分支,H1),高度(RightBranch,H2),abs(H1-H2)=<1. 我根据较旧的 stackoverflow 代码编写了此 ..
发布时间:2022-01-05 18:59:36 其他开发

平衡 AVL 树需要不止一次旋转?

我最好的猜测是,当您从已经平衡的 AVL 树中插入或删除一个元素时,一次旋转总是足以平衡 AVL 树. 一转就够了吗?一个示例将有助于需要多次轮换的情况. PS:我只将 RL/LR 旋转算作一次旋转. 解决方案 对于 insert 最多旋转 1 圈. 对于删除,旋转次数以 O(log(n)) 为界.Log(n) 是树的高度. 关于 AVL 删除的更多解释.当你从 AVL 中 ..
发布时间:2022-01-05 18:44:43 其他开发

AVL 树上的二叉搜索树

据我所知 AVL 树和 二叉搜索树 在平均情况下是相同的,在最坏的情况下,AVL 会击败 BST.这给了我一个暗示,即 AVL 在与它们交互的所有可能方式中总是优于 BST,也许在平衡实现方面增加了一点复杂性. 是否有任何理由应该首先使用 BST 而不是 AVL? 解决方案 首先,获得最佳性能不是编程的最终目标.因此,即使选项 B 总是比 A 更快并且消耗的内存更少,但这并不意味着它 ..

连接/合并/加入两个 AVL 树

假设我有两个 AVL 树,并且第一棵树中的每个元素都小于第二棵树中的任何元素.将它们连接成一棵 AVL 树的最有效方法是什么?我到处搜索,但没有找到任何有用的东西. 解决方案 假设您可能会破坏输入树: 移除左树最右边的元素,并用它来构造一个新的根节点,其左孩子是左树,右孩子是右树:O(log n) 确定并设置该节点的平衡因子:O(log n).在(临时)违反不变量的情况下,平衡因子 ..
发布时间:2021-12-22 08:28:42 C/C++开发

计算二叉搜索树高度的最佳方法?(平衡 AVL 树)

我正在寻找在 AVL-tree 中计算节点余额的最佳方法.我以为我可以正常工作,但是在进行了大量插入/更新之后,我可以看到它无法正常工作(根本无法正常工作). 这是一个两部分的问题,第一部分是如何计算子树的高度,我知道定义“节点的高度是最长向下路径的长度到那个节点的叶子." 我理解它,但我未能实现它.更让我困惑的是,这句话可以在维基百科的树高上找到“通常,值 -1 对应于没有节点的子树,而零 ..

红黑树和AVL树的区别

谁能解释一下这两种数据结构之间的主要区别是什么?我一直试图在网上找到一个突出差异/相似之处的来源,但我没有找到任何信息量太大的信息.在什么情况下,一种会比另一种更受欢迎?什么实际情况使一个比另一个“更好"使用? 解决方案 AVL 树比红黑树保持更严格的平衡.在 AVL 树中从根到最深叶的路径最多为 ~1.44 lg(n+2),而在红黑树中最多为 ~2 lg(n+1). 因此,在 AV ..

哪个更快,对向量进行排序,然后将其放入AVL树中,还是直接输入?

情况是这样的: 我有数百万,可能是数十亿的字符串,我试图解析并放入排序结构中,假设我有 5,000,000 个字符串.我正在尝试编写一个快速程序,可以将所有这些字符串从一个未排序的向量放入一个有序的数据结构中,该数据结构也可以快速搜索该结构,从而推理 AVL 树(最终我计划使用哈希表az 进行更快的查找,但稍后会出现).我首先将所有字符串放入一个向量中,但它们都被打乱、未排序且长度不同.我不 ..
发布时间:2021-06-15 19:53:33 C/C++开发

C-比较来自不同分配的指针?

我在C语言中实现了AVL树.直到后来我才读到指针比较仅在同一数组中的对象之间有效.在我的实现中,我进行了某些相等性测试.例如,为了测试节点是否是父节点的右子节点,我可以测试 node == node-> parent-> right .但是,节点是根据需要分配的,而不是连续的块.是否定义了此行为?如果不是,您将如何编写此代码? 解决方案 对于平等和不平等,在标准(ISO/IEC 9899: ..
发布时间:2021-05-03 19:04:49 其他开发

将N个元素添加到空AVL树中的运行时间

“高度为h的avl树的最小节点"的公式是递归的:n(0)= 1,n(1)= 2n(h)= 1 + n(h-1)+ n(h-2) 另一方面,我在互联网上发现这是为了解释向空avl树添加N个元素的复杂性: 好吧,想象一下正在构建的树.元素逐一穿过树节点,并通过左移或右移选择其居所.每当高度偏斜时,树就会自我平衡.当然,平衡树的成本是O(1)运算,因此在复杂度分析中我不考虑这一点.复杂度:log ..
发布时间:2021-04-29 18:51:16 其他开发

如何扩充AVL树?

我想扩充一个avl树,以便为每个节点添加额外的属性,例如它包含的节点数(即在其子树中). 从此处的此avl Java实现代码 http://www.blackbam.在/blackbams-blog/2012/05/04/avl-tree-implementation-in-java/我想向其中添加某些代码,以便每个节点都包含一个size元素. 在AvlNode类中,我将其更改为: ..
发布时间:2021-04-29 18:49:36 Java开发

在具有完整可复制示例C的AVL树上旋转

我已经在此功能上停留了2天,所以我想弄清楚.下面的代码是我的尝试(感谢user3386109),以便在通用节点上进行rightRotate.我认为这很接近,但问题是当我运行代码时旋转发生了,但是当我实际打印值时,似乎什么也没发生. #include#includetypedef结构树mynode;struct tree {//节点struct整数值整数 ..
发布时间:2021-04-15 19:37:39 其他开发

AVL树删除

查找示例AVL树,以便从树中删除单个(特定)值导致重新平衡从两个不同的节点开始. 这是我的家庭作业问题.我知道什么是AVL树,但是我不明白上面的问题.有人可以照亮吗? 在两个不同的节点上重新平衡是否意味着需要两次旋转才能修复树? 解决方案 AVL重新平衡操作是特定节点需要应用一次或两次旋转以纠正树中不平衡的时间.我认为问题在于,您要寻找一种情况,其中在AVL树中进行单旋转或双旋 ..

处理AVL树中的重复密钥

我想使我的 avl-tree 支持重复键,但是 binary search tree 的默认行为存在问题,因为重复操作会导致节点旋转用相同的键位于父级的左侧和右侧. 例如,当添加三个全部都具有键A的节点时,将导致树进行如下旋转: A/\A A 因此,使用该键获取所有条目将是一个问题...双向搜索都不好. 我想到的解决方案是使每个节点存储一个重复数组因此,当添加一个已经存在的新项 ..

求职面试问题使用树,要保存哪些数据?

我正在解决以下求职面试问题,并解决了大部分问题,但最后一项要求却失败了. 问::构建支持以下功能的数据结构: Init -初始化空白DS.O(1)时间复杂度. SetPositiveInDay(d,x)-将添加到DS中的 d 天恰好是 x 的新人感染了covid-19.O(log n)时间复杂度. WorseBefore(d)-从插入DS的日期开始,并且比小 d天,返回最后一个 ..
发布时间:2021-04-02 20:35:30 其他开发

查找具有n个节点的可能AVL树的数量的公式

让节点数为3。 如果a,b,c ..按c> a> b的顺序排列,则可能的avl树为: n = 1表示1,n = 2表示2 ..(查看图片) 对于BST,我们知道它是2n C n /(n + 1)。 有人试图推导一个公式,该公式可以找到avl树的数量。给出了个节点。 示例问题:具有11个节点的可能的avl树的数量是多少? 解决方案 我怀疑存在简单的公式。但是您可以通过动 ..
发布时间:2020-10-18 00:30:25 其他开发

AVL树中的叶子之间的高度差

AVL树中的任何两个叶子之间的最大差是多少?如果我举一个例子,如果高度差大于2(对于任何两片叶子),我的树就会变得不平衡,但是答案是该差可以是任何值。我真的不明白,这是怎么可能的。有人可以举例说明吗? 解决方案 任意两个级别的差异叶子可以是任何价值! AVL的定义仅描述来自一个节点的两个子树上的高度差。 因此,您需要以相等的高度填充子树,然后添加新节点以创建该单节点差异。但是没有人说那个 ..
发布时间:2020-10-18 00:21:55 其他开发

实施AVL树

我正在尝试按照此处。我在使它工作时遇到一些问题。当前,我在插入的“右大小写”中收到此错误。具体在此行: //右右案例 if(balance leftRotate(root); 我得到的错误是: 抛出异常:读取访问冲突。 root._Mypair._Myval2->正确._Mypair._Myval2为nullptr。 如果有人可以帮助我解 ..
发布时间:2020-09-27 23:42:43 C/C++开发

Java的AVL树

我不确定我是否正确执行此操作,因为这是我第一次使用节点进行编码.但是到目前为止,这是我的代码,如果有人可以看一下并帮助我了解我做错了什么.另外,我的插入/删除方法也给我带来了麻烦.教授为我们提供了伪代码,但是我似乎无法掌握如何将其解释为Java代码,因为我以前从未做过这种类型的代码.主要是因为有一个if语句检查高度以查看树是否平衡,我将如何在其中实现高度?提示或任何帮助都将不胜感激,我已经坚持了一 ..
发布时间:2020-09-21 00:54:43 Java开发

旋转二叉搜索树

我正在实现一个二进制搜索树.如果发现树不平衡,我已经创建了一种旋转树的方法.不知何故,此方法无法正常工作,我的树被清空了.我添加的使树不平衡的最后两个值仍然保留在树中.你能告诉我我的算法有什么问题吗?我没有发布整个课程,因为它很长,不想让任何人感到困惑. public boolean balanceBST(){ if (root == null){ retu ..
发布时间:2020-09-21 00:44:41 Java开发