通过序数索引访问红黑树

2023-12-01

我有一棵红黑树(二叉树,所有叶子都在2层以内)。 我可以浏览节点:向左、向右或父节点。 我知道节点的全部数量。

我必须找到树中第 N 个最小的元素。有没有比 O(n) 更快的方法?有什么通过索引优化访问的想法吗?


在每个节点 X 中,您应该存储以 X 作为根的子树中有多少个节点。

count(LEAF) = 1
count(NODE) = count(NODE->LEFT) + count(NODE->RIGHT) + 1

在每次插入/删除期间,您应该使用此方程来更新受旋转影响的节点中的计数。

之后解决方案就简单了

NODE nth(NODE root, int n) {
    if (root->left->count <= n) return nth(root->left, n);
    if ( root->left->count + 1 == n) return root;
    return nth(root->right, n - root->left->count - 1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过序数索引访问红黑树 的相关文章

  • 在 Python 中删除表达式树及其每个子表达式树中第一个元素周围的括号

    目标是实现简化操作 删除表达式树及其每个子表达式树中第一个元素周围的括号 其中表达式作为括在各个括号中的字符串输入给出 这必须适用于任意数量的括号 例如 12 3 45 6 gt 123 45 6 删除 12 周围的括号 然后删除 45 周
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • 无痛“算法分析”培训? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在大学时曾有过一次关于 算法分析 课程的痛苦经历 但最近发现在大学中需要它真实世界 无论如何 我正在
  • 合并空间上接近的路径/线段的算法

    我正在寻找一种用于街道地图制图概括的几何算法 名称 在我的地图数据中 我有许多路径 点的有序列表 由线段连接 这些路径彼此靠近且几乎平行 我如何 1 识别这些 相邻路径 即如何找到比某个阈值更接近的路径 以及 2 将它们合并成一条路径 即如
  • 获取无平方数的列表

    获得该值的一种方法是自然数 1 n 我们对每个因子进行因式分解 看看它们是否有重复的质因数 但这对于大的情况来说会花费很多时间n 那么有没有更好的方法从 1 中获取无平方数n 您可以使用埃拉托斯特尼筛法的修改版本 取一个布尔数组 1 n 预
  • C# 计算LRC(纵向冗余检查)

    我一直在到处研究这个问题 所有 LRC 实现似乎都没有给我正确的答案 花了几天时间后 我决定将我的代码放在这里 看看其他人是否可以发现问题 这是代码 C Input Data 31303030315E315E31303030325E315E
  • 为无向无权图实现推重标签算法 s-t 最小割边

    我正在寻找一个好的解决方案来在无向和未加权图中找到 s t 最小切割边 我想使用推送重新标记算法 但我不确定如何实现它以在无向和未加权图上找到最小割 在每对顶点之间有两条反向边 并在所有边上赋予相同的权重 并应用推送重新标记算法 我可以用这
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 递归和大O

    我最近正在完成一项涉及递归和大 O 表示法的计算机科学作业 我相信我很好地理解了这一点 虽然当然不是完美的 但是有一个问题给我带来了最多的问题 奇怪的是 一看就知道是作业上最简单的一个 使用大哦符号提供最佳增长率来解决以下递归问题 T 1
  • 如何动态查找连接组件

    使用不相交集数据结构可以很容易地得到图的连通分量 而且 它只是支持增量连接组件 http www boost org doc libs 1 46 1 libs graph doc incremental components html 然而
  • 哪种数据聚类算法适合检测时间序列事件中未知数量的聚类?

    这是我的场景 考虑在不同地点和时间发生的一组事件 例如 考虑有人在高空记录暴风雨期间城市中的雷击 就我的目的而言 闪电是瞬时的 只能击中某些位置 例如高层建筑 还可以想象每次雷击都有一个唯一的 ID 以便以后可以参考该雷击 这个城市大约有1
  • 按百分比减少多边形面积

    我有一个由点 x y 组成的多边形 我想做的是将其减少一个百分比 请记住 我不想只是扩大规模 多边形应该有一种内部边界 其宽度取决于百分比 该内部边界被多边形切断 谁知道可以实现这一目标的算法 输入 点数组 百分比 输出 点数组 你所寻求的
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 字符串排序真的是 O(n^2logn) 吗? [复制]

    这个问题在这里已经有答案了 我读了以下内容 排序需要 O NlogN 那么它怎么是 O N 2logN 我们在这里想念的是 两个字符串的比较不是 O 1 在最坏的情况下 需要 在 所以最终的复杂度是O N 2logN 它是否正确 我一直认为
  • 如何求解:T(n) = T(n - 1) + n

    我已经解决了以下问题 T n T n 1 n O n 2 现在 当我解决这个问题时 我发现界限非常松散 我是否做错了什么 或者只是这样 您还需要一个递归关系的基本情况 T 1 c T n T n 1 n 为了解决这个问题 您可以首先猜测一个
  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑

随机推荐

  • 使用关联数组替换字符串中的多个单词,保持原始大小写不变

    我想将数组与文本字符串进行匹配 其中与数组键匹配的单词将被替换为带有匹配数组值的标题的 span 标记 我可以使用 str ireplace 做到这一点 但随后匹配的单词会失去大小写 glossary array word1 gt span
  • 将参数传递给所有视图

    我想在我的所有 Twig 视图 全部从通用 Twig 布局扩展 上显示用户名 上次连接日期 时间和一些其他信息 如何实现这一目标 而不必将这些参数从每个控制器显式传递到每个视图 我是否必须创建一个 Twig 扩展 或者调用一个控制器 操作来
  • 参数“indexController”不是函数,未定义

    之前已经问过这个问题 但它没有回答我的问题 我对 Angular 还很陌生 目前我只是把东西放在一起 我试图让我的工厂在我的控制器内工作 但是我的控制台中不断出现以下错误 Argument indexController is not a
  • Rails:属于_to,条件/范围抛出语法错误

    我想选择拥有的公司 我尝试了多种组合 新的 Rails 3 旧的学校 所有这些都抛出相同的语法错误unexpected n expecting gt belongs to from class name Company foreign ke
  • xslt文档函数问题

    如果您正在使用文档功能并打开可能不存在的文件 例如
  • 正则表达式替换除特定模式之外的所有内容

    我正在寻找提取 50 来自或多或少具有这种格式的字符串 The 50 is in here somewhere 我还想摘录一下 50 50 25 从这样的字符串 50 of 50 is 25 Regex Match 似乎是明显的竞争者 然而
  • 通过多个分组将长形重塑为宽形

    我的数据如下所示 Smoker PtNo Day Hour FEV1 timename 1 0 1 1 0 3 26 d1h0 2 0 1 1 2 3 05 d1h2 3 0 1 1 4 3 02 d1h4 4 0 1 1 6 3 27 d
  • 使用 Facebook API PHP 在某人的墙上发帖

    是否可以编写一个在某人的墙上发布消息的应用程序 并且如果该用户尚未接受此时提示的许可 这是我的代码 attachment array access token gt access token message gt message name
  • C# 文件处理 - 创建文件并打开

    这就是我在文件上创建和写入的内容 Create Directory path Create Name file name private void Create File string Create Directory string Cre
  • 调用always_inline '__m256d _mm256_broadcast_sd(const double*)' 时内联失败

    我正在尝试运行由我的朋友创建的 Visual Studio cpp 项目 我正在尝试在没有 VS 的情况下运行该文件 但我收到了错误列表 全部采用相同的格式 inlining failed in call to always inline
  • C# json.net 子对象的自定义序列化

    我正在使用 JSON NET 将类序列化为 JSON 该类包含一个由项目列表组成的属性 我想以自定义方式序列化项目本身 通过使用自定义的 ContractResolver 动态地仅包含某些属性 所以基本上我想用 DefaultContrac
  • 在 php 中使用 fopen() 创建文件时的默认权限是什么?

    如果调用时文件不存在 fopen
  • 彩色动画内容演示器

    我无法在 ContentPresenter NormalTextDay 中创建动画或自定义颜色 此错误出现在我的 XAML 中 System Windows Media Animation ColorAnimation 动画对象无法用于对属
  • 需要在 Apache 上允许编码斜杠

    我目前正在尝试将 URL 放入 URL 中 例如 http example com url http 3A 2F 2Fwww url2 com 我知道我必须对 URL 进行编码 我已经这样做了 但现在我得到了404从服务器而不是我的应用程序
  • 对 JTable 进行排序会导致 NullPointerException

    我有一个 JTable 当单击相应的按钮时 它开始填充在后台进行的文件树遍历的结果 这很好用 然后我决定对表格进行排序 经过一番阅读后 我创建了一个 TableRowSorter 并设置表来使用它 它似乎有效 但经过仔细检查 我发现一些文件
  • Bing 地图 API 与 Android 应用程序的集成程度如何?

    首先我想问一下 你能整合吗 Bing Maps在 Android 应用程序中 其次 如果可以的话有什么好处Bing已经结束Google Maps API反之亦然 Updates This Android SDK v1 5现已弃用 看到这个链
  • PreparedStatement 如何避免或防止 SQL 注入?

    我知道PreparedStatements 可以避免 防止SQL 注入 它是如何做到的 使用PreparedStatements 构造的最终表单查询是字符串还是其他形式 考虑做同一件事的两种方法 PreparedStatement stmt
  • Windows 批处理文件中的传递、转义和识别特殊字符

    我编写了一个脚本 它会遍历输入字符串的每个字符 并根据我需要执行不同操作的字符 只要我的输入不包含任何空格或双引号字符 这种方法就可以很好地工作 我知道我必须转义特殊字符 但由于某种原因 我似乎对空格和双引号做错了 如果我使用参数 ab c
  • 打印图像的实际尺寸

    嗨 朋友们 我想打印我生成的图片 我使用以下代码 Printer BeginDoc Printer Canvas Draw 0 0 img1 Picture Bitmap Printer EndDoc 它可以工作 但它打印的图像非常小 我如
  • 通过序数索引访问红黑树

    我有一棵红黑树 二叉树 所有叶子都在2层以内 我可以浏览节点 向左 向右或父节点 我知道节点的全部数量 我必须找到树中第 N 个最小的元素 有没有比 O n 更快的方法 有什么通过索引优化访问的想法吗 在每个节点 X 中 您应该存储以 X