比较两个指针是否相等的二叉搜索树遍历

2024-02-10

我正在阅读 Cormen 算法书(二叉搜索树章节),它说有两种无需递归即可遍历树的方法:

使用堆栈和 更复杂但更优雅 不使用堆栈的解决方案,但 假设两个指针可以 测试平等

我已经实现了第一个选项(使用堆栈),但不知道如何实现后者。 这不是作业,只是为了教育自己而读书。

关于如何在 C# 中实现第二个的任何线索?


当然可以。您没有说您想要什么样的遍历,但这是中序遍历的伪代码。

t = tree.Root;
while (true) {
  while (t.Left != t.Right) {
    while (t.Left != null) {   // Block one.
      t = t.Left;
      Visit(t);
    }
    if (t.Right != null) {     // Block two.
      t = t.Right;
      Visit(t);
    }
  }

  while (t != tree.Root && (t.Parent.Right == t || t.Parent.Right == null)) {
    t = t.Parent;
  }
  if (t != tree.Root) {        // Block three.
    t = t.Parent.Right;
    Visit(t);
  } else {
    break;
  }
}

要获得前序或后序,您需要重新排列块的顺序。

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

比较两个指针是否相等的二叉搜索树遍历 的相关文章

  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • 在Application_AquireRequestState事件中用POST数据重写Url

    我有一个在其中注册路线的代码Application AcquireRequestState应用程序的事件 注册路由后 我会在 Http 运行时缓存中设置一个标志 这样我就不会再次执行路由注册代码 在此事件中注册路线有特定原因Applicat
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • 更改 IdentityServer4 实体框架表名称

    我正在尝试更改由 IdentityServer4 的 PersistedGrantDb 和 ConfigurationDb 创建的默认表名称 并让实体框架生成正确的 SQL 例如 而不是使用实体IdentityServer4 EntityF
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 错误左值需要作为赋值C++的左操作数

    整个程序基本上只允许用户移动光标 如果用户位于给定的坐标范围 2 2 内 则允许用户键入输入 我刚刚提供了一些我认为足以解决问题的代码 我不知道是什么导致了这个问题 你能解释一下为什么会发生吗 void goToXY int int 创建一
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • 使用 Chrome 和 Selenium 设置 LocalStorage

    我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值 我认为这相当微不足道 但我似乎无法让它发挥作用 我对 C 很陌生 所以我可能错过了一些东西 无论如何 我有这个功能 public static void
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐

  • 使用 Flask 为使用 create-react-app 创建的前端提供服务

    我有一个带有 API 路由的 Flask 后端 由使用 create react app 创建的 React 单页应用程序访问 当使用 create react app 开发服务器时 我的 Flask 后端可以工作 我想为构建的服务 使用n
  • 如何在正则表达式中处理 \^$.?*|+()[{ 等特殊字符?

    我想匹配一个正则表达式特殊字符 http www regular expressions info characters html 我试过 x lt a b grepl x Error invalid regular expression
  • 使用selenium解决验证码问题

    我下面的代码是不断解决不同的验证码 请纠正我的错误 因为我不知道是什么原因造成的 from selenium import webdriver from python3 anticaptcha import ImageToTextTask
  • 通过单击按钮动态地将文本框添加到表单中

    我是一名 php 程序员 我有一个用户输入表单 其中一个人应该能够通过单击按钮添加任意数量的文本框 以输入多个电子邮件 ID 例如 他单击按钮第一次添加了一个附加文本框 他第二次单击该按钮 添加了另一个文本框 等等 您可以通过以下方式创建元
  • Java正则表达式匹配带有撇号的单词

    我有一句话 不 没关系 滞后 我试图检测 无滞后 模式 我的正则表达式是no s w s 1 3 lag 这失败了 但是 如果我的句子是 no it all right lag 请注意 它的单词没有撇号 则匹配成功 谁能建议我如何忽略窗口中
  • 分割字符串并保留分隔符

    我正在编写一个 chrome 扩展 我需要拆分一个仅包含文本和 img 标签的字符串 以便数组的每个元素都是字母或 img 标签 例如 a b c
  • Android-如何在文本视图上显示文本选择?

    我正在实现一个 epub 阅读应用程序 其中使用 textview 来显示 epub 文本 我想当用户长按文本视图时从文本视图中选择文本 然后对文本视图的选定文本执行多种操作 例如突出显示等 那么 我如何向用户显示这些光标来选择用户想要的文
  • 天文台重置

    我正在尝试完全重新启动 Chronometer 但它不起作用 相反 它正在暂停 基本上我想做的是在计时器计数到 10 时做一些事情 完成后我们提示用户重试 在这种情况下 我们希望从 1 秒重新计数到 10 秒 但计时器从暂停时间开始 而不是
  • Emscripten 绑定:如何从 Javascript 创建可访问的 C/C++ 数组?

    我在用box2d https github com kripken box2d js 并尝试创建一个链条形状 为了创建链形状或多边形形状 我必须传递向量数组才能指定几何形状 我没有看到任何文档可以帮助我完成此任务 也没有看到有关绑定的注释h
  • ASP.NET - Server.HtmlEncode 将哪些字符编码为命名字符实体

    Server HtmlEncode 将哪些字符编码为命名字符实体 到目前为止我只发现 lt gt amp and quot 肯定还有更多的事情吗 这是代码HtmlEncode 所以在这里您可以看到他们是如何做到的 public static
  • C“for”循环中的多个条件

    我遇到了这段代码 我通常使用 或 将多个条件分开for循环 但此代码使用逗号来执行此操作 令人惊讶的是 如果我改变条件的顺序 输出就会改变 include
  • freemarker跳过assertNotNull InvalidReferenceException

    我使用 freemarker 渲染对象列表 ul lt list publication as item gt li b item key b item value li ul 但有些项目的 item value null 会引发异常 fr
  • Runbook 测试窗格不显示写入输出

    我对自动化是全新的 对 Powershell 也很陌生 所以我希望这是一个简单的修复 我正在尝试让一些代码运行 据我所知 它确实运行了 但测试窗格没有显示任何内容 基于此线程 Azure powershell Runbook 不显示任何输出
  • 从 ionic 应用程序调用本机 Android 应用程序

    我正在开发一个将由 Android 本机应用程序调用的应用程序 我还得给他们打电话 为此我发现这个插件 https github com EddyVerbruggen Custom URL scheme 他们将按照以下代码调用我的应用程序
  • 如何实现 dropzone.js 将文件上传到 Amazon s3 服务器?

    请帮助实现 dropzone js 将文件上传到 Amazon s3 服务器 已经参考了以下链接https github com enyo dropzone issues 33 https github com enyo dropzone
  • 如何在Android上从方位角获取罗盘方向

    我必须显示用户指向 Android 设备的方向 我在用Sensor TYPE ACCELEROMETER Sensor TYPE MAGNETIC FIELD获取方位角 俯仰角 横滚角 但我能够弄清楚如何从中获取方向 北 南 东 西 请帮忙
  • eclipse使用什么算法在Serialized类中生成verison id?

    假设这是我的班级 class B implements Serializable private static final long serialVersionUID 5186261241138469827L what algo is us
  • 如何在Java中独立于主线程运行线程?

    目标是能够调用执行单独的线程从内部主班 一些背景 我有一个程序必须运行process 过程 一个cmd 仅当主程序执行完毕并从内存中卸载时才应运行 我应该在其中包含什么代码主班 如果你的意思是 我如何启动一个不会在我的 JVM java 程
  • Google 在 iOS 上设置自动完成功能 - 无法加载搜索结果 - 请重试

    我在这里发布这个是因为我不知道还能在哪里发布这个 今天 我们的应用程序不再返回 Google Places API 的结果 我们看到该请求在 Google 开发者控制台上得到通过 但所有手机均未返回任何结果 今天这个数字还在攀升 并且每个用
  • 比较两个指针是否相等的二叉搜索树遍历

    我正在阅读 Cormen 算法书 二叉搜索树章节 它说有两种无需递归即可遍历树的方法 使用堆栈和 更复杂但更优雅 不使用堆栈的解决方案 但 假设两个指针可以 测试平等 我已经实现了第一个选项 使用堆栈 但不知道如何实现后者 这不是作业 只是