如何在不使用递归的情况下遍历二叉搜索树?

2024-03-09

我可以使用递归轻松遍历二叉搜索树,但我不知道如何在没有递归的情况下遍历二叉搜索树,所以请任何人解释一下,.....


是的,你可以用堆栈来做到这一点。你必须在这里采用 stack 算法,以二叉搜索树的迭代方式(非递归方式/方法)进行预重排序、中序和后序遍历。希望你能得到适当的帮助。

预购:

1)创建一个空栈node_Stack,并将根节点压入栈中。

2)当node_Stack不为空时执行以下操作。

-> 从堆栈中弹出一个项目并打印它。

-> 将弹出项目的右子元素推入堆栈

-> 将弹出项目的左子项推入堆栈

为了:

1)创建一个空栈S。

2) 将当前节点初始化为root

3)将当前节点压入S,并设置current = current->left,直到current为NULL

4) 如果 current 为 NULL 并且堆栈不为空则

 -> Pop the top item from stack.

 -> Print the popped item, set current = popped_item->right 

 -> Go to step 3.

5) 如果 current 为 NULL 并且 stack 为空,那么我们就完成了。

订单后:

1.1 创建空栈

2.1 当 root 不为 NULL 时执行以下操作

-> Push root's right child and then root to stack.

-> Set root as root's left child.

2.2 从堆栈中弹出一个项目并将其设置为根。

-> If the popped item has a right child and the right child 
   is at top of stack, then remove the right child from stack,
   push the root back and set root as root's right child.

-> Else print root's data and set root as NULL.

2.3 当堆栈不为空时,重复步骤2.1和2.2。

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

如何在不使用递归的情况下遍历二叉搜索树? 的相关文章

  • 汉诺塔递归算法

    我在理解这个河内塔递归算法时遇到问题 public class MainClass public static void main String args int nDisks 3 doTowers nDisks A B C public
  • Django CMS 多级下拉菜单

    我对 Django CMS 有点陌生 我尽力避免询问 但这让我发疯 我制作了一个带有主题和类别模型的 Wiki 应用程序 我将它连接到我的 CMS 上的一个站点并将其添加到我的菜单中 现在我希望能够在我的菜单上显示所有顶级类别 其子类别和主
  • 交换数组中的奇数和偶数

    我在这个网站上看到了这段代码 它使用一种方法对数组进行排序 偶数在前面 奇数在数组后面 我想知道你是否可以做同样的事情 除了先出现奇数 然后出现偶数 我尝试过但没有成功 我是java编码新手 我想测试递归 public class Recu
  • 使用递归对数字求和

    我刚刚研究了递归的概念 我想尝试一个简单的例子 在下面的代码中 我尝试获取数字 1 2 3 4 5 并使用递归将它们加在一起 我预计结果是 15 但我的代码返回 16 我究竟做错了什么 Code static void Main strin
  • 有人可以解释一下这段代码吗?排列代码[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在做一
  • 完美平衡二叉搜索树

    我有一个理论问题Balanced BST 我想建立Perfect Balanced Tree具有2 k 1节点 从常规unbalanced BST 我能想到的最简单的解决方案是使用排序Array Linked list并递归地将数组划分为子
  • 递归函数提取所有叶节点

    我正在尝试递归遍历 json 树并提取所有叶节点 子节点 null 并返回一个平面列表 我没有得到完整的清单 我只得到一件物品 我想我已经快到了 但我不太清楚我在这里犯了什么错误 请指教 let cluster children child
  • 删除方法二叉搜索树

    我正在尝试为我一直在研究的 BST 结构实现一个删除方法 下面是查找 插入和删除方法的代码 public class BST BSTNode root new BSTNode root public void insert BSTNode
  • Elixir 中的递归和匿名函数

    我正在尝试定义一个匿名函数来执行点积 我可以将其编码为私有函数 没有任何问题 但我正在努力解决匿名函数语法 我知道我可以以不同的方式实现这一点 但我试图了解如何使用模式匹配和递归来定义匿名函数 这是我当前的实现 dot fn i input
  • 最大递归并不完全是 sys.getrecursionlimit() 所声称的。怎么会?

    我制作了一个小函数 可以实际测量最大递归限制 def f x r x try r f x 1 except Exception as e print e finally return r 为了知道会发生什么 我已经检查过 In 28 imp
  • 嵌套列表的非递归遍历——在Python中构建类似的嵌套列表

    我需要遍历一个嵌套列表 处理每个非列表项str 并返回保持结构的类似列表 使用递归 这会相当容易 但我需要以这种迭代的方式进行 下面是我的尝试while loop def myiter e a e initial list c final
  • 计算产生相同 BST 的唯一节点序列的数量

    问题 给定一个最多 50 个整数的特定序列 它们代表 某个二叉搜索树 BST 的节点 有多少种排列 这个序列在那里 这也会产生完全相同的 空白石板时间 将原始序列作为 1 个序列包含在总计数中 例如 对于这样的序列 5 2 1 9 8 答案
  • 计算 python 字典/数组数据结构的非空尾叶 - 递归算法?

    我正在寻找一个函数来查找一种复杂字典 数组结构的所有非空端点 我认为因为我不知道嵌套数组的数量或它们的位置 所以它必须是递归的 而我只是还没有完全理解这种思维方式 所以对于嵌套字典 x top middle nested value nes
  • 知识树中的段错误

    我正在用 c 实现一个可以从文件中读取的知识树 我的 newStr 函数出现段错误 我无法用这个问题测试我的其余代码 我对 c 没有太多经验 任何帮助将不胜感激 我的 c 文件 包括 包括 include 动物 h 包括 包括 return
  • 如何使用生成器遍历文件系统?

    我正在尝试创建一个实用程序类来遍历目录中的所有文件 包括子目录和子子目录中的文件 我尝试使用发电机 因为发电机很酷 然而 我遇到了困难 def grab files directory for name in os listdir dire
  • 文件/文件夹结构的递归搜索

    我正在尝试为返回文件和文件夹列表的 Web 服务构建递归搜索功能 我创建了这两个方法 因此它们充当递归搜索 它首先获取顶级内容 然后将任何文件添加到 fileList 并将任何子文件夹添加到 subFoldersList 我们传入访问级别
  • 嵌套列表递归python的序列

    给定一些数字 n 我想生成一个大小为 n 的列表 其中以下示例显示列表中的第 n 个元素应该如何 对于 n 0 返回 对于 n 1 返回 对于 n 2 返回 对于 n 3 返回 基本上 它采用先前的列表并将它们附加到新列表中 我尝试过以下方
  • 如何获得字符串的所有字谜

    我试图找到一个字符串的所有可能的字谜并仅使用递归将它们存储在数组中 我被困住了 这就是我所拥有的一切 int main const int MAX 10 string a ABCD string arr 10 permute arr a 0
  • 用于插入/删除/排名/选择查询的最佳数据结构/算法

    到目前为止 我知道像AVL树和红黑树这样的自平衡BST可以在O log n 次内完成这些操作 然而 要使用这些结构 我们必须自己实现AVL树或RB树 我听说有一个算法 实现这四个操作而不使用自平衡 BST 有了我们自己定义的结构 我们就需要
  • 方案中的尾递归幂函数

    我在方案中编写尾递归幂函数时遇到问题 我想使用辅助函数来编写该函数 我知道我需要一个参数来保存累计值 但在那之后我就陷入了困境 我的代码如下 define pow tr a b define pow tr h result if b 0 r

随机推荐

  • Blazor 服务器和 EF Core:在上一个操作完成之前,已在此上下文实例上启动第二个操作

    我的 ef 核心有问题 我有两个从数据库读取数据的服务 在一个页面上调用第一个服务 在第二个页面上调用第二个服务 当我单击按钮创建新程序时 出现错误 我通常从带有注入服务的页面调用它 有人可以帮我吗 在应用程序中显示 https i sta
  • 部署到 nexus 时 maven-metadata.xml 未更新

    我正在使用 Apache Maven 3 0 Nexus 开源版 版本 1 8 0 1 这是我的 pom xml 的一部分
  • 按下后退按钮时重新启动片段类

    我有一个片段是选项卡视图的一部分 我想在按后退按钮时重新启动此片段 但我不知道如何刷新它 我尝试了一些这样的代码 重新启动 Activity 内的片段 https stackoverflow com questions 13989300 r
  • Android与php:将utf-8字符串保存到MySQL

    我知道我问的问题以前已经被问过很多次了 但我觉得我需要澄清我的问题 我有一个 Android 应用程序 它将 JSON 编码的字符串发送到 PHP 脚本 然后 以下代码将数据保存为完整的 JSON 字符串 还有其他函数可以将数据正确保存到多
  • 从 delphi 调用 .net 程序集 (PSafeArray)

    我在 net 上编写了程序集 这是该程序集的函数 public class OMG public Result test var tmp new List
  • 为什么删除的复制构造函数不允许使用其他多态类型的构造函数?

    我想知道为什么这个程序无法编译 在 msvc gcc 和 clang 上有相同的行为 include
  • 矩阵和向量之间的欧氏距离

    根据另一个向量的每一列计算向量的欧几里德 它是否正确 distances np sqrt np sum np square new v val reshape 10 1 axis 0 new v 是一个矩阵 val reshape 10 1
  • 数据变化时的Activity转换

    我得到了图像适配器 其中每个项目都是用户图像 单击时它会打开一个包含所选用户图像的新活动 因此我将图像标记为共享元素并使用活动转换 我对第二个活动执行的部分操作会影响所有用户 因此适配器调用notifyDataSetChanged并将位置重
  • 混合 datetime.strptime() 参数

    混淆是一个很常见的错误datetime strptime https docs python org 2 library datetime html datetime datetime strptime使用以下格式格式化字符串和日期字符串参
  • Excel 下拉至整列

    如何将下拉菜单 数据验证 复制到 Excel 中的整个列 仅包含其他内容的行 并且 在这种情况下 如何为标题保留行 不要单击单元格 而是单击标题 A B C 等 并转到 数据工具 gt 数据验证
  • 通过 RDP 远程访问 SF 节点

    如何远程连接到 SF 集群中的节点 由于这些只是虚拟机 我感觉我应该能够通过 RDP 访问它们 即使这是我通常想要避免的事情 我将如何进行远程处理 在 Vaclav 的答案中添加一些特定于 Service Fabric 的详细信息 标准 S
  • 退回邮件解析

    我目前在捕获 解析和排序退回的电子邮件方面遇到了麻烦 我已经很好地设置了基础知识 并且它满足了我的要求 这很好 问题是退回的电子邮件中返回的消息似乎没有标准 例如 某些服务器返回 RFC 1893 指定的错误代码 我十有八九可以通过简单的正
  • 如何继承系统的抗锯齿设置,以便像 swing 那样将文本绘制到屏幕外图像?

    当我在 Java 6 下运行 swing GUI 应用程序时 它们会自动使用我为所有字体配置的子像素抗锯齿设置 结果比标准 AA 选项有了很大改善 但是当我绘制图像时 我找不到初始化图形上下文以使用系统的 AA 配置的方法 尝试使用 Jav
  • 如何在 .NET 7 中为 Number 提供通用变量?

    我们可以使用新的INumber
  • 来自 FileObserver 的 Toast

    我有个问题 我正在使用一个FileObserver 它将新文件从监视的目录移动到另一个以前指定的目录 在我看来 只要观察者观察目录 即使应用程序仅在后台运行 也应该显示一条 toast 消息 指出 文件 xy 已被移动 但我没有让它发挥作用
  • “Java 修改的 UTF-8 编码”是什么意思?

    Java 修改的 UTF 8 编码 是什么意思 它与普通的 UTF 8 编码有何不同 javadoc 中有详细描述DataInput http download oracle com javase 6 docs api java io Da
  • DeleteFile() 或 CopyFile() 会抛出异常吗?

    我用DeleteFile and CopyFile方法 这些函数是否抛出异常或只是设置errno and lastError 我需要用以下内容包围这段代码吗try and catch 如果您指的是 Win32 API 函数 答案是否定的 W
  • chrono stable_clock 没有给出正确的结果?

    我的应用程序服务器代码中有一行代码 它使用以下命令获取时间戳值steady clock如下所示 uint64 t now duration cast
  • 如何创建具有特定 inode 编号的文件?

    如何在 ext3 文件系统中创建文件 具有特定的索引节点号 例如 我想创建一个 inode number 12253 的文件 我认为从用户空间创建文件时没有任何编程方式来请求特定的索引节点号 除了可见于stat 结果 inode 编号在用户
  • 如何在不使用递归的情况下遍历二叉搜索树?

    我可以使用递归轻松遍历二叉搜索树 但我不知道如何在没有递归的情况下遍历二叉搜索树 所以请任何人解释一下 是的 你可以用堆栈来做到这一点 你必须在这里采用 stack 算法 以二叉搜索树的迭代方式 非递归方式 方法 进行预重排序 中序和后序遍