我似乎无法找到正确的搜索字词(因为我确定之前已经问过这个问题),所以我会再次提问。
如何编写上传节点的代码"之前"直到没有更多? 注意:我不允许使用帮助方法(所以我不认为我可以使用递归方法)。
基本上我想打印一个节点"之前" (指向前一个节点),直到我用完为止。
示例(伪代码):
node.prev
node.prev.prev
node.prev.prev.prev
修改 我实际上并没有处理节点,这更准确。 所以我有Actors,带有#34;标签"这指向前一个演员。我试图为这样的事情写一个循环:
a = g.label(actor);
b = g.label(a);
c = g.label(b);
当我将代码编写为:
while(g.label(a) != null) {
a = g.label(a);
}
我被困在第一个演员身上。
答案 0 :(得分:0)
如果我理解正确,你想从下往上遍历树?
如果每个节点只引用子节点,那么就没有办法做到这一点。如果每个节点都引用了child和parent(或者在这种情况下只是父节点),那么它应该非常简单。
Node currentNode = new MyNode();
while (currentNode.parent != null) {
currentNode = currentNode.parent;
}
// currentNode should now be the topmost node in the tree
答案 1 :(得分:0)
对于actors()
方法应该做什么可能有点误解。或者,应该被称为。
我们假设,根据您所描述的,您的课程是这样的:
public class Actor {
private Actor label;
// other fields
// other setters and getters
public Actor getLabel() {
return label;
}
}
我冒昧地添加了没有参数的getLabel()
方法,因为它是一个简单的getter。
话虽如此,我们考虑你的循环(用上面的修改):
while(g.getLabel() != null) {
a = g.getLabel();
}
对此的影响应该是显而易见的:您永远不会更新g
引用。因此,您将拥有无限循环。
相反,假设你决定从一个已知的值开始 - 可能是null
可能不是a
,如果不是,你想继续走向前一个标签
如果是这种情况,那么你只需要一个变量来保持当前位置,另一个变量作为标记参考。我们假设g
将保留当前位置,Actor a = g.getLabel();
while(a != null) {
a = a.getLabel();
}
将成为标记参考。
a
这将更新Actor
中的引用,直到它指向层次结构中{{1}}的最后一个非空实例。