我递归地加载马谱系数据.对于一些错误的数据集,我的递归永远不会停止......这是因为数据中有循环.
如何检测这些循环以停止重复?
我想到的是反复出现维持所有"访问过的"马匹的哈希表.但这会发现一些误报,因为一匹马可以在树上两次.
不可能发生的事情是,一匹马看起来像是父亲或祖父或自己的祖父.
我需要一组有序的对象,目前正在使用TreeSet.我的问题是compareTo对象经常会返回0,这意味着这两个对象的顺序保持不变.TreeMap(TreeSet默认情况下使用)然后将它们视为同一个对象,这不是真的.
我TreeMap可以使用什么替代品?
使用案例:我有一组可显示的对象.我想按Y坐标对它们进行排序,以便它们以正确的顺序呈现.当然,两个对象可能具有相同的Y坐标.
给出一种特殊类型的树,其中所有树叶都标有标记,L其他树标记有N.每个节点可以有0个或最多2个节点.给出了树的前序遍历.
给出一个算法来从这个遍历构建树.
我正在尝试为学校做作业,我不知道如何处理输入.我在下面提供了一个关于作业背景的链接:
我对如何完成任务所要求的一切有一个大概的想法,但我不确定如何处理输入.
示例输入是:
A0
0
A00
ab000
这给出了一个输出:
树1:
无效!
树2:
高度:-1
路径长度:0
完整:是
后序:
树3:
高度:0
路长度:0
完整:是
后序:一个
树4:
高度:1条
的路径长度:1个
完整:是
后序:BA
我打算用Java做这件事.我的问题是,如果没有在输入文件中输入管道,如何将样本中的多行输入输入Windows cmd.exe行?因为按Enter键只会使用一行输入来运行程序,而不是创建一个新行.此外,由于分配是自动标记的,输入不能是交互式的,那么我如何知道何时停止阅读?
谢谢.
我已经创建了一个TreeNode类的方法,我想要返回一个按顺序树遍历的平面列表
我的示例树是:

顺序遍历输出应该是: [1, 1, 0, 2, 1, 3, 1, 1, 0]
但我得到了: [2, 1, 1, 0, 1, 3, 1, 1, 0]
这是我的代码:
def in_order_list(self, r = []):
hasLeft = self.left is not None
hasRight = self.right is not None
if self is None:
return
else:
if hasLeft:
self.left.in_order_list(r)
r.append(self.value)
if hasRight:
self.right.in_order_list(r)
return r
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么会这样吗?
谢谢Alex
我正在为一个正在进行的软件工程课程的项目工作.目标是设计一个程序,该程序将使用遗传编程生成适合所提供的训练数据的数学表达式.
我刚刚开始研究这个项目,我正试图围绕如何创建一个允许用户定义的树高度的二叉树,并保持每个节点分离,以便在我到达时使交叉和变异更简单实施这些过程.
这是我到目前为止创建的节点类.请原谅我确信我明显缺乏经验.
public class Node
{
Node parent;
Node leftchild;
Node rightchild;
public void setParent(Node p)
{
parent = p;
}
public void setLeftChild(Node lc)
{
lc.setParent(this);
leftchild = lc;
}
public void setRightChild(Node rc)
{
rc.setParent(this);
rightchild = rc;
}
}
public class OperatorNode extends Node
{
char operator;
public OperatorNode()
{
double probability = Math.random();
if (probability <= .25)
{
operator = '+';
}
else if (probability > .25 && probability <= .50)
{
operator = '-'; …Run Code Online (Sandbox Code Playgroud) 如何打印二叉树的外框.
打印只有1个叶子的所有节点
100
/ \
50 150
/ \ /
24 57 130
/ \ \ \
12 30 60 132
Run Code Online (Sandbox Code Playgroud)例如:输出应为100,50,24,12,30,57,60,130,132,150
如果我们编写三个不同的函数来打印左节点,叶节点和右节点,它可以很容易地解决,但需要O(n + 2logn)时间.
我也在寻找O(n)方法,但条件是每个节点只应访问一次,不需要额外的O(2logn)部分.
关于螺纹二进制搜索树的解释(如果你知道它们,请跳过它):
我们知道在具有n个节点的二叉搜索树中,有n + 1个左右指针包含null.为了使用包含null的内存,我们按如下方式更改二叉树 -
对于树中的每个节点z:
如果left [z] = NULL,我们在left [z]中输入tree-predecessor(z)的值(即指向包含前任键的节点的指针),
如果right [z] = NULL,我们在右[z]中输入tree-successor(z)的值(同样,这是指向包含后继键的节点的指针).
像这样的树称为线程二进制搜索树,新链接称为线程.
我的问题是: 螺纹二进制搜索树的主要优点是什么(与"常规"二叉搜索树相比).在网上快速搜索告诉我,迭代地实现有序遍历有助于,而不是递归地实现.
这是唯一的区别吗?还有其他方法可以使用线程吗?
这是如此有意义的优势吗?如果是这样,为什么?递归遍历也花费O(n)时间,所以..
非常感谢你.
algorithm binary-tree asymptotic-complexity binary-search-tree data-structures
我想编写一个函数来检查两个二叉树是否相同.
代码如下:
bool checkSame(Node* first, Node* second) {
// Check if nodes are the same
// Check left nodes: checkSame(first->left, second->left)
// Check right nodes: checkSame(first->right, second->right)
}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道该返回什么地方.我发现的所有DFS实现都有一个void返回值.有没有一个它返回一个布尔?
另外,我正在寻找递归解决方案,而不是迭代解决方案.
binary-tree ×10
algorithm ×4
java ×3
recursion ×2
.net ×1
c ×1
c++ ×1
collections ×1
command-line ×1
function ×1
genealogy ×1
input ×1
python ×1
sorting ×1