二叉搜索树中的有序后继者

2023-12-02

给定 BST 中的一个节点,如何找到下一个更高的密钥?


一般方法取决于节点中是否有父链接。

如果您存储父链接

然后你选择:

  1. 如果当前节点有右子节点,则为右子节点的最左子节点。如果右孩子没有左孩子,那么右孩子就是你的顺序继承人。
  2. 向上导航父祖先节点,当您找到其左子节点是您当前所在节点的父节点时,该父节点就是原始节点的中序后继节点。

如果您有右孩子,请执行此方法(上面的情况 1):

inorder-when-right-child

如果您没有合适的孩子,请执行此方法(上面的情况 2):

inorder-when-no-right-child

如果您不存储父链接

然后,您需要对树进行完整扫描,通常使用堆栈跟踪节点,以便您拥有必要的信息,基本上可以执行与依赖父链接的第一个方法相同的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉搜索树中的有序后继者 的相关文章

  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • 在java中使用BUBBLE SORT对二维字符串数组进行排序

    类似的问题已经被问过 但从来没有关于二维字符串数组 因此在尝试了很长时间之后我找不到我想要的 我正在尝试使用 BubbleSort 对 java 中的 2D 字符串数组进行排序 作为输入 我收到一个二维字符串数组 一个表 以及您应该排序的
  • 解开 Knuth 的结:如何重构意大利面条式代码?

    这个问题的灵感来自如何将流程图转化为实施 https stackoverflow com questions 36647765它询问如何通过算法消除goto代码中的语句 这answer https stackoverflow com a 3
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
  • 每个术语出现的次数

    我得到了一个数组a n 2 where n can be 10 5最大时有n个科目和n个学生 全部编号为 1 2 n a i 0 and a i 1 1 lt i lt n 表示在第 i 个科目中 所有来自a i 0 to a i 1 通过
  • 有没有时间复杂度为O(N)的排序算法?

    大多数排序算法的复杂度为 O NN 或 O NlogN 来实现结果 但是 对于特定的输入集 有些算法的复杂度为 O N 我想知道是否有一种排序算法在所有情况下都具有 O N 的复杂度 如果您只能比较 检查两个项目是否为 正在排序的值 那么您
  • 如何对对象进行排序? (画家算法)

    所以我有 4 个矩形形状 我正在尝试应用排序算法 画家算法 https en wikipedia org wiki Painter 27s algorithm 来知道我需要先绘制哪些形状 在 3d 中 然后绘制哪个形状 Note 相机位于右
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • 公式的后序遍历

    在数据结构中 我将按顺序转换和预排序公式转换为树 不过 我不太擅长后期订购 对于给定的公式x y z a b c 我想出了 divide x c y z a b 在大多数情况下 这似乎很合适 除了左子树中的 是牌组中的小丑 在后序遍历中 最
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 选择一组数字以达到最小总数的算法

    给定 一组数字n 1 n 2 n 3 n x 还有一个数字M 我想找到最好的组合 n a n b n c n gt M 该组合应达到达到或超过 M 所需的最小值 没有其他组合可以提供更好的结果 将在 PHP 中执行此操作 因此可以使用 PH
  • d3.js:修改树布局中的链接

    抱歉我的英语不好 我在这里使用这个例子 http bl ocks org mbostock 4339083 http bl ocks org mbostock 4339083构建树形图 但我用矩形更改了根的子级中的圆圈 现在该图有点混乱 因
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • 如何从 Trie 中检索给定长度的随机单词

    我有一个简单的 Trie 用来存储大约 80k 长度为 2 15 的单词 它非常适合检查字符串是否是单词 但是 现在我需要一种获取给定长度的随机单词的方法 换句话说 我需要 getRandomWord 5 来返回 5 个字母的单词 所有 5
  • 通过排列四个给定数字找到最大可能时间 HH:MM

    我最近为了工作晋升而参加了编码测试 这是我真正遇到的任务之一 我想知道什么是最好的方法来做到这一点 我使用了大量的 if 和 if else 这不是最干净的解决方案 但完成了工作 我被问到的问题是 将 4 个数字格式化为 24 小时时间 0
  • 如何提高洪水填充例程的性能?

    我正在我的应用程序中实现四路洪水填充 伪代码如下 Flood fill node target color replacement color 1 If the color of node is not equal to target co
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误

随机推荐

  • 如何在反应材料表上添加精美的滚动条?

    我在用着反应材料表并想要一个像样的滚动条而不是默认的分页 我努力了反应自定义滚动但它没有按照我的意图工作 我的应用程序的默认滚动条已激活 还有一件事 我怎样才能将这种类型的滚动应用到桌体上 import CustomScroll from
  • Fragment 和 Anko toast 的“接收器类型不匹配”

    我正在尝试使用 Jetbrains 的 Anko 库在我的应用程序中轻松显示 Android toast 消息 这是相关的代码片段 val message CharSequence Recycled holder taskEditText
  • 从 IntentService 向 Activity 发送消息

    我在同一个应用程序中有一个活动和一个intentService 该服务必须在活动结束后继续运行 因此我不想绑定 我已经在谷歌上搜索了几个小时 但找不到一个关于如何做到这一点的好例子 我可以启动该服务并向其传递额外内容 但现在该服务必须使用
  • iPad 上的 iAd:横向 iAd 方向不正确

    这仍然是一个相对较新的主题 因此不确定有多少人必须在 iPad iOS4 2 1 上实现 iAd 但基本上 我让 iAd 横幅以横向模式显示 并且显示正确 唯一的问题是 当我单击 测试广告 时 它会以纵向模式显示测试广告 即 设备仍处于横向
  • 有没有办法使用 Video.js 从视频标签获取当前字幕的文本?

    我想在播放视频期间获取当前字幕的文本 并且实现自己的字幕块 即隐藏原始字幕 并以几种不同的方式使用该信息 目前我使用videojs为我的球员 有什么方法可以从中获取当前标题的字符串吗 此代码获取当前提示并放入 span element fu
  • R curl::has_internet() FALSE 即使有互联网连接

    使用 R 包 Eurostat 从 EuroSTAT 下载数据时出现了问题 Population data by NUTS3 pop data lt subset eurostat get eurostat demo r pjangrp3
  • 为什么Android C2DM推送消息总是不到达?

    我已经构建了一个功能正常的 C2DM 应用程序 通常它运行得很好 并且推送消息到达得很快 然而 我发现当我第一次启动应用程序或将其重新聚焦时 消息经常不会到达 它们肯定发送成功 我收到 200 响应 并且消息格式肯定是正确的 稍后发送相同的
  • C 中的 size_t 是什么?

    我很困惑size t在 C 中 我知道它是由sizeof操作员 但它到底是什么 它是一种数据类型吗 假设我有一个for loop for i 0 i lt some size i 我应该使用int i or size t i 来自维基百科
  • 如何让自动对焦在第二个 AVCaptureSession 中工作而不重新创建会话?

    当我创建第二个 AVCaptureSession 时 自动对焦不适用于第一个 AVCaptureSession 要创建的第二个会话是自动对焦工作的会话 而第一个创建的会话则不自动对焦 我希望任一会话在另一个会话停止后启动时都能够自动对焦 就
  • 如何比较两个捕获的声音,看看哪一个声音更大?

    给定从麦克风捕获的两个字节数组的数据 我如何确定哪一个有更多的噪声尖峰 我假设有一种算法可以应用于数据 但我不知道从哪里开始 说实话 我需要能够确定婴儿何时哭泣以及房间内的环境噪音 如果有帮助 我正在使用 Microsoft Xna Fra
  • 无法实例化子目录中定义的类

    我的 简化的 项目布局如下 init py test py lib init py lib client py my test py简单来说就是 import lib client A client A Test and my lib cl
  • UIWindow 的根视图控制器在应用程序启动时不会旋转到横向

    我正在开发一个基于 xib 的仅横向应用程序 该应用程序可以在横向模式下正确启动 然而 我的主 ViewController 中的视图是纵向呈现的 也就是说 它旋转 90 度 使图像看起来被裁剪并且不会占据整个屏幕 如果我使用我的界面来呈现
  • grails 线程 -> hibernateException:没有 Hibernate 会话绑定到线程

    我试图在服务中创建一些线程 但我得到了 hibernateException no session 我已经在 stackoverflow 中看到过关于此问题的讨论 其中包含抛出 RuntimeException 的解决方案 就我而言是行不通
  • 如何使用 hive 上下文有效地查询 Spark 中的 hive 表?

    我有一个 1 6T Hive 表 其中包含时间序列数据 我在用Hive 1 2 1 and Spark 1 6 1 in scala 以下是我的代码中的查询 但我总是得到Java out of memory error val sid da
  • 如何使用 OpenCV 在 Python 中向图像添加噪声(高斯/盐和胡椒等)[重复]

    这个问题在这里已经有答案了 我想知道Python中是否存在一些带有OpenCV或任何其他Python图像处理库的函数可以向图像添加高斯或椒盐噪声 例如 在 MATLAB 中 存在执行相同工作的直接函数 或者 如何使用 Python 和 Op
  • 当我向 Parse 提交新帖子时应用程序崩溃

    这是我的应用程序崩溃的唯一地方 也是更重要的功能之一 LogCat 告诉我 java lang IllegalArgumentException 您必须使用 ParseObject create 或正确的子类创建这种类型的 ParseObj
  • Unity批量注册按惯例

    我正在尝试在 Unity IoC 中执行与以下 Autofac 代码等效的操作 builder RegisterAssemblyTypes typeof DataRepository lt gt Assembly Where t gt t
  • Svelte 3 中是否存在动态道具

    当我迭代动态组件时 例如
  • 成功部署后Az​​ure Web应用程序未更新

    我在 azure 上有一个托管 Web API 的 Web 应用程序 我在 Visuall Studio 上更新了代码 然后将更新推送到 Azure 上的 Web 应用程序 它说它正在成功更新 我尝试通过 git 和 ftp 发布 它在云上
  • 二叉搜索树中的有序后继者

    给定 BST 中的一个节点 如何找到下一个更高的密钥 一般方法取决于节点中是否有父链接 如果您存储父链接 然后你选择 如果当前节点有右子节点 则为右子节点的最左子节点 如果右孩子没有左孩子 那么右孩子就是你的顺序继承人 向上导航父祖先节点