理解从先序遍历构造树的伪代码

2024-01-11

我需要做一些类似于这个问题中描述的任务:
根据给定的前序遍历构造树 https://stackoverflow.com/questions/4908545/construct-tree-with-pre-order-traversal-given

这里有一个非常有用的答案,但我不完全理解伪代码,所以我想知道是否有人可以帮助向我描述发生了什么。

k = 0 // Initialize
input = ... get preorder traversal vector from user ... // Get input
Reconstruct(T) // Reconstruct method with tree input
  if input[k] == N // If element of input is N
    T = new node with label N // Make a new node with label N in tree T
    k = k + 1  // Increment k for next loop (Is this whole thing a loop? or a method call?)
    Reconstruct(T.left) // ?????
    Reconstruct(T.right) // ?????
 else // If element of input is L
    T = new node with label L // Make a new node with label L in tree T
    T.left = T.right = null // ?????
    k = k + 1 // Increment k for next loop

我已经在评论中写下了我对事物的理解,如果有人能够检查我的理解是否正确以及问号位的作用,我将非常感激。另外,这个伪代码是否通过运行输入并在输入中遇到 L 时回溯来创建一棵新树?或者重建现有的二叉树?


没有循环。k是一个全局范围的变量,可以在Reconstruct(T)。它只是字符数组(输入字符串)的当前索引。

正如您引用的问题中所解释的(通过先序遍历构造树 https://stackoverflow.com/questions/4908545/construct-tree-with-pre-order-traversal-given),正确的算法是先计算节点的左子节点,然后再计算右子节点,这就是您在true的部分if。如果当前节点恰好是叶子节点,L,然后不给它子级并返回到调用函数。

这个函数的作用是沿着树的左边缘,将子节点添加到所有树中N节点并且不向所有节点添加子节点L节点(又名叶子)直到字符串结束。

编辑:当伪代码的作者说T.left = T.right = null,表示此时当前节点没有左子节点或右子节点(因为它是叶子节点)。这只是一个断言,不一定需要出现在代码中。

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

理解从先序遍历构造树的伪代码 的相关文章

  • 全二叉树的叶节点数

    Problem求一棵有 n 个节点的满二叉树的叶节点数 我为上述问题编写了一个递归程序 遍历树并在到达没有子节点的节点时增加叶节点的数量 但由于树是一个完整的二叉树 我认为这会让问题变得更容易 但我不知道如何解决 能否以紧凑的形式 类似于公
  • 什么Python代码为二元运算符生成所有可能的分组(树)

    正如几个 SO 问题中所解释的 更抽象的是数学世界 http mathworld wolfram com BinaryBracketing html 加泰罗尼亚数字的序列恰好对应于可以为任何给定数量的运算符生成的括号分组的数量 但我还没有找
  • 证明具有相同中序和先序遍历的二叉树是相同的?

    有谁知道如何prove如果两个二叉树具有相同的中序和先序遍历 那么它们是相同的 也许通过表明不能有两个具有相同中序和先序遍历的不同二叉树 或者 展示一个反驳这一点的案例 或者展示为什么不能这样做 我承认 这纯粹是学术性的 但它不是家庭作业或
  • 使用递归从二叉搜索树中删除节点

    因此 我尝试使用类中的这两个函数从树中删除节点 不幸的是 它只是没有删除任何内容 我想知道它出了什么问题 任何帮助将不胜感激 def Find Min self node current node while current left is
  • 是什么使得树遍历是前序的还是有序的?

    为什么通过根 左 右进行的树遍历称为前序 难道这不应该是有序的吗 因为根总是第一位的 对我来说 为什么这样称呼它没有意义 因为根始终是第一个元素 我们总是有这样的限制 左孩子在右孩子之前被访问 主要区别在于根在哪里 如果根是before两个
  • 尝试在本地环境中调试 LeetCode 答案时出错

    我正在研究 LeetCode 问题199 二叉树右侧视图 https leetcode com problems binary tree right side view 给定二叉树的根 想象自己站在它的右侧 返回您可以看到从上到下排序的节点
  • 从二叉搜索树中删除节点,haskell

    我正在制作一个 Haskell 函数来从二叉搜索树中删除一个节点 我知道根据儿童数量需要采取的行动的规则 目标家长有 没有孩子 删除 1 个孩子 替换为孩子 2 个子节点 找到右子树中的最小值并用该值替换该节点 然后 递归删除右子树中的最小
  • 以数组形式遍历不平衡二叉树

    不平衡 或非堆 二叉树可以使用数组表示 如下所示 array 1 2 null 3 4 5 6 null 7 8 null 1 2 null 3 4 5 6 null 7 8 null 如何使用给定的数组进行树遍历 更具体地说 如何计算父母
  • 制作二叉搜索树

    当我有一个包含 100 个元素的数组列表时 如何制作 BST 3 2 6 7 99 我相信TreeSet是二叉搜索树的实现 由于整数有一个自然排序您可以简单地循环遍历整数数组并将它们全部添加到TreeSet
  • 二叉树获取最左或最右底部

    我有一个存储二叉树的表 如下所示 Id ParentId Level Placement 47 1 0 0 23 47 1 0 86 47 1 1 5 23 2 0 29 23 2 1 68 86 2 0 8 5 3 1 31 29 3 1
  • 克隆二叉树的时间复杂度

    我想知道克隆二叉树的代码的时间复杂度是否为 O n 如果是 O n 你能解释一下为什么吗 如果没有 你能建议一种时间复杂度为 O n 的方法吗 public TreeNode cloneTree TreeNode root if root
  • 根据使用频率随机生成字母?

    如何根据常用语音中的使用频率随机生成字母 任何伪代码都值得赞赏 但如果用 Java 实现就更棒了 否则 只需朝正确的方向戳一下就会有所帮助 注意 我不需要生成使用频率 我确信我可以很容易地查找到它 我假设您将频率存储为 0 到 1 之间的浮
  • 使用霍夫曼代码压缩文件的步骤

    我知道有很多涉及霍夫曼代码的问题 包括我自己的另一个问题 但我想知道实际编码文本文件的最佳方法是什么 减压看似微不足道 遍历树 在 0 处向左 在 1 处向右 打印字符 但是 如何进行压缩呢 以某种方式将字符的位表示存储在树的节点中 每次遇
  • 使用堆属性按排序顺序打印树 (Cormen)

    我对算法理论 来自 Cormen 感到耳目一新 二进制尝试一章中有一个练习 要求 min heap 属性可以用来打印 n 节点的键吗 树在 O n 时间内排序 展示如何做 或解释为什么不做 我想是的 这是可能的 在最小堆中 节点中的元素小于
  • 如何在 O(n) 时间内遍历二叉树而不需要额外的内存

    给定一棵带有整数 左指针和右指针的二叉树 如何在 O n 时间和 O 1 额外内存 无堆栈 队列 递归 内遍历该树 This guy http nandacumar blogspot com 2006 06 traversing tree
  • Java 中具有级别顺序插入的完整二叉搜索树

    我们接到一个任务 需要编码 二叉搜索树 那个树has to be complete not perfect 这意味着所有不在最低级别或次低级别的节点都应该有 2 个子节点 而最低级别的节点应尽可能远离左侧 我们需要插入到树中等级顺序 所以如
  • 具有查找功能的优先级队列 - 最快的实现

    我正在考虑实现一个带有附加要求的优先级队列 一个查找 搜索功能 它将告诉一个项目是否在队列中的任何位置 所以函数将是 insert del min 和 find 我不确定是否应该使用堆或自平衡二叉搜索树 看来 PQ 通常是用堆实现的 但我想
  • JAVA:二叉树

    在这里 我尝试练习制作二叉树 以便我可以对它们进行不同的操作 import java util import java lang public class Main public static void main String args B
  • Scala:具有复杂结构的树插入尾递归

    我正在 scala 中创建自定义对象树 并且我的插入方法引发堆栈溢出 因为它不是尾递归 但是 我不太清楚如何使其尾递归 我见过使用 累加器 变量的相关示例 但它们要么是只能相乘和覆盖的整数之类的东西 要么是我在适应树时遇到困难的列表 这是我
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可

随机推荐

  • Asp.net 会员资格 - 帐户被锁定

    我们正在使用 ASP net 附带的标准 ASP net 会员功能 我们的会员数据库中的某些帐户将 锁定 标志设置为 true 这种情况何时 如何发生 在可配置的时间长度 passwordAttemptWindow 默认 10 分钟 内登录
  • JQuery FullCalendar 从 ajax 成功调用 rerenderEvents 时出现问题

    由于某种原因 我无法在 POST 后重新呈现日历 到那时一切都很顺利 calendar fullCalendar select function startDate endDate ajax url data php type POST d
  • 使用 Skip/Take 进行分页时 LINQ 查询性能极差

    我需要使用 LINQ 从 DB2 数据库查询记录 我有从数据库架构生成的实体 并尝试使用 Skip 和 Take 执行 LINQ 查询 基础表大约有 25 列 可能有 100 万条记录 当我在没有 Skip 的情况下执行查询时 大约需要 0
  • 反应式表单提交后显示错误消息

    在 Angular 8 Reactive 表单上 我有以下内容
  • phonegap 3.5.0 中缺少 Cordova jar

    在我使用phonegap 2 7 0之前 因此 对于phonegap更新 我使用node js安装了phonegap版本3 5 0 但在phonegap文件夹中没有cordova jar文件 如果我在 ADT 中创建一个项目 如何添加 co
  • VS2008 C++ 优化器有时会生成较慢的代码吗?

    继从上一个问题 https stackoverflow com questions 5165877 whole program optimization failing in vc2008 我一直在我的发布版本中尝试优化器设置 以了解使用编
  • 检测简单数值向量中的一个或多个拐点

    All 我正在寻找一种可靠的 无监督的方法来检测相对较短的向量中的变化点 考虑以下两个示例 v1 c 0 299584 0 314446 0 357783 0 388896 0 410417 0 427182 0 450383 0 4666
  • 使用 NVIDIA TensorRT 推理引擎运行 Tensorflow

    我想使用 NVIDIA TensorRT 来运行我的 Tensorflow 模型 目前 TensorRT 支持 Caffe prototxt 网络描述符文件 我无法找到将 Tensorflow 模型转换为 Caffe 模型的源代码 有什么解
  • 如何以编程方式关闭选择文件对话框

    我有一个输入字段type file选择图像文件 但我想要的是 如果有人打开文件选择器对话框 并且在某些特定事件中 它会自动 以编程方式关闭对话框 而无需用户点击取消按钮 有什么办法可以用js jquery来实现吗 互动
  • jquery 插件 Isotope 的回调

    我正在使用同位素 http isotope metafizzy co http isotope metafizzy co 具有可扩展的项目 我想使用 ScrollTo 以便我可以自动滚动到新扩展的项目 我首先尝试将回调与 reLayout
  • Spring @Value 无法识别 Interger 属性值

    我正在创建一个用于邮件服务配置的组件 gt gt Component PropertySource classpath mail properties public class Mail Value email config host pr
  • StackOverflow 中的 301 重定向。它是如何运作的? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们以这个问题的网址为例 http stackoverflow com questions 20306229 301 redirect i
  • PHP - Laravel Collection 或 Array 的类型提示

    我想创建一个接受任何可遍历对象作为参数的函数 例如 Laravel Collection Array 有没有办法在函数参数中输入提示这个条件 我希望在单一定义中实现以下两个效果 function test array traversable
  • Visual Studio 2010:关于“程序数据库管理器”的致命错误 C1902

    这是MSDN上的一些描述 错误信息 程序数据库管理器不匹配 请检查您的安装 程序数据库文件 pdb 是使用比编译时发现的版本更新的 mspdb80 dll 创建的 此错误通常表明 mspdbsrv exe 或 mspdbcore dll m
  • 替换池中表现不佳的工人

    我有一组无国籍的演员 执行类似的任务 这些工人中的每一个都是不可靠的并且可能表现不佳 在我的设计中 我可以轻松地产生更多演员来取代懒惰的演员 演员的演技是靠自己来评价的 有没有办法让主管 演员池进行此评估 以帮助决定哪些工作人员速度慢到足以
  • 无法从临时历史表中删除行

    我最近发现了 SQL Server 中的时态表 我想开始使用这个功能 然而 最大的障碍是无法从中删除记录 由于 GDPR 合规性 这是绝对必须的 从历史表中删除记录显然会导致错误 无法从临时历史表中删除行 因此 为了能够从历史表中删除记录
  • 原则问题:无法获取最后插入标识符

    当我尝试将数据保存到我的模型时 Doctrine 抛出此异常 Message Couldn t get last insert identifier 我的表设置代码是 this gt hasColumn id integer 4 array
  • Typescript 类型转换对象因此特定的必需键在类型中不再是可选的?

    假设你有一个对象类型 type Person name string color string address string 但是 您想将该类型更改为以下类型 您知道名称和颜色将存在 type Person name string colo
  • ASP.NET MVC 中部分视图的正确位置是什么?

    有人会确认 ASP NET MVC 中部分视图的最佳位置吗 我的想法是 如果这是一个将在许多地方使用的全球视图 那么就可以共享 如果它是视图的一部分 并被包装到部分视图中以使代码阅读更容易 那么它应该进入 Views Controller
  • 理解从先序遍历构造树的伪代码

    我需要做一些类似于这个问题中描述的任务 根据给定的前序遍历构造树 https stackoverflow com questions 4908545 construct tree with pre order traversal given