public int at(int i) {
BNode current = storage.root;
return traverse(i, current);
}
public int traverse (int i, BNode root){ // Each child of a tree is a root of its subtree.
if (root.left != null) {
traverse(i, root.left);
}
if (root.right != null) {
traverse(i, root.right);
}
if(root.index == i) {
System.out.println(root.value);
return 1;
}
return -1;
}
这只是代码的一部分,当我运行时,System.out.println(root.value)行正确执行并打印值,但它不返回1而是返回-1,这给了我一个头痛。 方法应该在print语句返回1之后退出,但是如何继续第二个return语句...我有一个任务在几个小时内到期,我觉得这个方法搞砸了我大声笑
答案 0 :(得分:1)
那是因为您没有返回从左/右节点返回的结果:
/path/to/dark.css
答案 1 :(得分:0)
想象一下这棵树:
[^0-9]
让我们看看该计划将会做些什么:
首先调用bc-01-ddd
abc-12-ddd
abc-03-ddd
abs-05-ddd
没有左侧节点,因此它继续前进
有一个正确的节点,因此它在右侧节点上调用 0:N1
\
1:N2
没有左侧节点,因此它继续前进
没有正确的节点,所以它继续前进
索引等于节点索引,因此返回1.
现在让我们缩小回第一个电话
索引不等于节点索引,因此它继续前进
它返回-1。
试试这个:
transverse(1, tree)
答案 2 :(得分:0)
您没有从这些递归调用返回值,因此当这两个递归调用中的一个变为" true"为:
H1 = hist(dat, breaks=16, xaxt="n")
axis(side=1, at=H1$breaks, labels=paste0(100*H1$breaks, "%"))
递归方法将返回1但在原始调用方法中将被忽略。
答案 3 :(得分:0)
您的关键问题是忽略traverse
的返回值。最好先评估自己的节点,这样就不会浪费不必要地遍历子节点。
public int traverse(int i, BNode root) {
// Check self first so you don't waste effort traversing child nodes
if (root.index == i) {
System.out.println(root.value);
return 1;
}
// If any child returns 1, we return 1
if ((root.left != null) && (traverse(i, root.left)==1)) {
return 1;
}
if ((root.right != null) && (traverse(i, root.right)==1)) {
return 1;
}
// If neither child nor self returns 1, we return -1
return -1;
}
答案 4 :(得分:-1)
你总是可以将var设置为-1,当它到达第三个时,如果它只是更改了var然后返回var,因为我不相信if语句中的Return语句将起作用。但是我有一段时间没有做过Java,所以我不是百分之百确定只是尝试一下。