问题标签 [preorder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1316 浏览

algorithm - 如何基于 preorder&inorder 或 postorder&inorder 遍历构造非二叉树?

我的数据结构和算法课的两个练习听起来像这样

构造前序遍历为:1、2、5、3、6、10、7、11、12、4、8、9,inode遍历为5、2、1、10、6、3、11的树, 7、12、8、4、9。

构造后序遍历为:5, 2, 10, 6, 11, 12, 7, 3, 8, 9, 4, 1,inode遍历为5, 2, 1, 10, 6, 3, 11的树, 7、12、8、4、9。

我只需要绘制树的结构,而不用编程语言实现它。使这项任务变得更难的是树不是二叉树。我可以使用什么技术来建造树木?

0 投票
0 回答
174 浏览

arrays - 从数组构建树

我被要求从一个数组构建一棵树,其中每个元素都包含节点的数据和树中节点的级别。该数组是节点的前序遍历。

我认为我的解决方案是错误的(或者至少不是最好的解决方案),但我不确定为什么以及正确的解决方案是什么。

我的方法是在第一次调用函数时从级别 0 开始,然后循环遍历数组,当我发现任何级别恰好比当前递归调用中的级别大 1 时,我进行递归调用从该元素的索引和增量级别开始的数组。然后,该递归调用的结果将是孩子。

我还检查数组中元素的级别是否等于当前递归调用中的级别 - 如果是,我会跳出循环,因为它将是我的兄弟姐妹,我不想返回我的兄弟姐妹,因为我的parent 将在另一个递归调用中处理该问题。

这有任何意义吗?我需要改变什么才能正确回答这个问题?

0 投票
1 回答
2219 浏览

inorder - 构造前序、后序和中序表达式的二叉树

我搜索了互联网和“you tube”,但没有找到任何好的教程。如何在“后缀”中绘制给定表达式的相应“二叉树”?

这个表达式在中缀和前缀中的外观如何?

我不知道我应该如何一步一步地做到这一点:(

18 5 1 + / 4 * 3 5 18 6 / - + -

笔记:

绘制前序、后序和中序的规则是: 1. 前序遍历:根,左,右 2. 后序遍历:左,右,根 3. 中序遍历:左根, 正确的

请问我考试需要它

0 投票
1 回答
760 浏览

java - Java:手动二叉树

我们在我的数据结构类中有一个任务,我们必须手动构建一个总共有 7 个节点的二叉树,并在前序遍历中显示每个节点中的数据。根节点有 2 个孩子,这 2 个孩子中的每一个都有 2 个孩子。我已经到了创建整个左侧到第一棵树的末尾的地步,但是一旦我创建了第一个右孩子,我就陷入了空指针异常。我已经搜索了与此类似的其他项目,但我似乎仍然无法找出这段代码的问题所在。我发现创建树的代码比我们分配的要好得多,但是我们在课堂上仅限于手动创建左右子节点。任何外部观点来帮助可能创建一个简单的程序将不胜感激!

}

}

0 投票
2 回答
4411 浏览

java - 将树遍历到数组中

我应该将二叉搜索树作为前序、中序和后序遍历,并将值插入到 Java 中的 Object[] 中。老实说,我不知道如何做到这一点,我需要一些建议。

我的功能:

我所需要的基本上是一些关于如何完成这项任务的想法或提示。如果我遍历树作为 preorder Object[0] 显然是根的值。然后我继续在左边的树中插入最左边的值到我的数组中。接下来,我插入最左边节点的右子节点,如果右节点没有子节点,则继续使用两个节点的父节点。

但是我的方法不记得已经检查和插入了哪些值。我还想过以后序遍历,将每个元素放入堆栈并将每个元素推送到我的数组中,但我对如何实现这一点的知识有限。

帮助!

以下是我认为已经正确的内容:

显然必须填补空白。

此外,我还有基本的方法和构造函数:

0 投票
1 回答
79 浏览

algorithm - 我关于前序遍历的想法有什么问题

当被要求在给定前序遍历的情况下创建 BST 时,给出的答案如下:http ://www.geeksforgeeks.org/construct-bst-from-given-preorder-traversa/

这需要很多代码。

我的问题是,为什么我不能插入一棵空树给我正确的答案?有没有简单的插入会导致错误答案的例子?例如,在该链接中给出的示例中,我们将 {10, 5, 1, 7, 40, 50} 作为前序遍历。但是,不只是按照预排序列表的顺序使用常规 BST 插入方法 6 次就给出了适当的树吗?我可以请一个反例和/或解释我为什么不正确吗?我一直想不出一个反例。

0 投票
2 回答
2962 浏览

java - 根据前序遍历返回BinaryTree的方法

我的问题是用签名写一个方法

(可以添加其他参数)

此方法必须返回一个BinaryTree给定的参数(相同大小等),只需要更改其节点中的值。结果树的每个节点的值必须等于我们使用前序遍历时处理等效节点的位置root。我们从 1 开始计数。

我尝试了以下方法,但它无法正常工作。

例如,如果我们有一个二叉树:

(节点中有什么值并不重要!)

我们的方法必须返回这棵树:

0 投票
2 回答
121 浏览

c++ - 一个将树作为参数并返回输入的整数数量的函数?

我的项目中需要一个函数,它将树作为参数并返回输入的整数数量和正确的调用。

不就是预购吗?如下所示。请。谢谢

呼叫将是预购(t)。

这是我原来的功能

0 投票
1 回答
87 浏览

binary-tree - 此语句是否为真(用于确定一棵树是否为另一棵树的子树)

我有两个二叉树T1T2,它们都是字符树,这意味着:

如果PreOrder2是 的子串PreOrder1,并且InOrder2是 的子串InOrder1,则T2是 的子树T1

上述说法是否属实?

树相等的定义:如果T1T2具有完全相同的数据值和分布,则T1 == T2,否则T1 != T2(NULL树相等)。

子树的定义:如果其中至少有一个节点,N1则为的子树。T1N1 == T2T2T1

基本上,我不是在谈论节点地址的等价性。我说的是树的数据值和分布。

== 编辑 ==

我认为这不是真的。中可能有两个子树T1,其中一个T2具有与 相同的 PreOrder,另一个具有与 相同的 InOrder T2

现在我的问题变成了:有没有一种简单的方法来确定是否T2T1使用遍历的子树?

== 编辑 ==

使语句为假的典型示例:

T1:

T2:

另一个T1:

0 投票
4 回答
4151 浏览

java - 有没有解决二叉树问题的“策略”?

我希望这是一个可以接受的问题。我理解递归的思维模式,我想先考虑基本案例,然后再考虑递归案例,但是对于一些更困难的 BST 问题,我只是空白,感觉就像在没有好的方向的情况下迷失了方向。

以链表为例,似乎有一种解决问题的模式,但 BT 似乎你知道或不知道。任何提示/指针?我似乎已经理解的唯一概念是,如果我正在处理空节点并且我想对它们或关于它们做些什么,我会把它作为一个案例

或者如果我与空节点没有任何关系,那么我使用倒置的基本情况

但即便如此,我也会不知所措。我想这是一个我被困住并且不知道如何解决的问题的例子。我不一定要寻找答案,只是处理此类问题(和常规二叉树问题)的潜在策略。


编写一个方法numberNodes来更改存储在二叉树中的数据,将从 1 开始的顺序整数分配给每个节点,以便前序遍历将产生按顺序(1、2、3 等)的数字。例如,给定由左下方的树引用的树,调用tree.numberNodes();将覆盖现有数据,将节点值从 1 分配到 6,以便树的前序遍历将产生1, 2, 3, 4, 5, 6

你不要改变树的结构。您只是更改存储在数据字段中的值。您的方法应该返回树中有多少节点的计数。

假设您要将此方法添加到IntTree如下定义的类中:


再看一遍代码后,我想我应该用我int count的方法来确定我是去左根还是右根,因为它是一个二叉搜索树,但我仍然无法实现这个功能......啊编码堵塞!