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

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(使用前将#替换为@)

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

  • 有没有相互递归的例子?

    是否有递归函数调用另一个函数 该函数也调用第一个函数 的示例 例子 function1 do something function2 do something function2 do something function1 do some
  • 如何使用二叉树中的递归来完成回溯

    我正在尝试插入一个二进制节点 我的代码很复杂 没有希望挽救它 所以我计划重写它 基本上我没有考虑回溯 也没有仔细考虑算法 我正在尝试使用顺序遍历插入二进制节点 但我不明白应该如何回溯 D B E A C F 我如何搜索根 D 的左子树 然后
  • 如何将嵌套对象数组转换为 CSV?

    我有一个包含嵌套对象的数组 例如 name 1 children name 1 1 children 1 2 id 2 thing name 2 1 children 2 2 name 3 stuff name 3 1 children 3
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • d3 树 - 有相同孩子的父母

    我一直在将代码从 JIT 转换为 D3 并使用树布局 我已经复制了代码http mbostock github com d3 talk 20111018 tree html http mbostock github com d3 talk
  • 为什么 array_merge_recursive 不是递归的?

    我最近在我的应用程序中发现了一个由意外行为引起的错误array merge recursive 让我们看一下这个简单的例子 array1 1 gt 1 gt 100 2 gt 200 2 gt 3 gt 1000 3 gt 1 gt 500
  • Python:使用列表创建二叉搜索树

    我的代码的目标是从 txt 文件中获取每个单独的单词并将其放入列表中 然后使用该列表创建二叉搜索树来计算每个单词的频率 并按字母顺序打印每个单词及其频率 中的每个单词只能包含字母 数字 或 我无法用我的初学者编程知识来做的部分是使用我拥有的
  • 使用递归 CTE 遍历父/子树?

    我被 cte 困住了 我想要一个查询 其中第一个父级为空 上一个父级的子级将成为下一个父级的父级 依此类推 WITH RESULT PARENT CHILD TNAME LEVEL AS anchor SELECT E PARENT GEN
  • e:B, f:(B,A)=>B) : B 是什么意思

    我对这意味着什么感到困惑 我理解柯里化 但我似乎无法完全阅读代码 def foldLeft A B xs List A e B f B A gt B B 只是几个建议 顺便说一句 里面没有柯里化 def foldLeft A B xs Li
  • Clojure 尾递归与质因数

    我正在尝试自学 clojure 并使用 Prime Factors Kata 和 TDD 的原则来实现这一目标 通过一系列 Midje 测试 如下所示 fact primefactors 1 gt list fact primefactor
  • 可以通过Data.Function.fix来表达变形吗?

    我有这个可爱的fixana这里的函数执行速度比她的姐妹快 5 倍左右ana 我有一个criterion报告支持我这一点 ana alg Fix fmap ana alg alg fixana alg fix f gt Fix fmap f
  • 为什么haskell中的递归列表这么慢?

    我对 Haskell 很陌生 我在 Haskell 中定义了一个函数 febs Integral a gt a gt a febs n n lt 0 0 n 1 1 n 2 1 otherwise febs n 1 febs n 2 但是
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 如何在不进行尾调用优化的情况下用函数式编程替代方案替换 while 循环?

    我正在 JavaScript 中尝试一种更实用的风格 因此 我用诸如map和reduce之类的实用函数替换了for循环 然而 我还没有找到 while 循环的功能替代品 因为尾部调用优化通常不适用于 JavaScript 据我了解 ES6
  • 求 3D 棋盘中水体积的技巧

    所以我有一个任务 我必须重新创建一个 3D 棋盘 它是一个 RxC 方块网格 每个方块的高度都不同 如果棋盘是不透水的 有人把水倒在棋盘上 直到棋盘无法容纳更多的水 那么它就会容纳固定数量的水 如果板已经容纳了最大体积的水 则倒入板上的任何
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • 递归中的收益回报

    我正在尝试创建一个 IEnumrable
  • 当满足动态条件时退出递归函数

    使用来自的函数生成汉明距离 t 内的所有比特序列 https stackoverflow com questions 40813022 generate all sequences of bits within hamming distan
  • 打字稿中的递归未定义

    我在组件内使用画布对象来生成图表 为了使其动画化 我递归地调用该方法 我不断收到错误消息 指出该方法未定义 不确定我需要如何构建它 任何帮助表示赞赏 Animate function protected animate draw to Cl
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则

随机推荐

  • 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 算法 以二叉搜索树的迭代方式 非递归方式 方法 进行预重排序 中序和后序遍