如何遍历“节点”?

时间:2014-04-23 23:42:39

标签: java nodes

我似乎无法找到正确的搜索字词(因为我确定之前已经问过这个问题),所以我会再次提问。

如何编写上传节点的代码"之前"直到没有更多? 注意:我不允许使用帮助方法(所以我不认为我可以使用递归方法)。

基本上我想打印一个节点"之前" (指向前一个节点),直到我用完为止。

示例(伪代码):

    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);
   }

我被困在第一个演员身上。

2 个答案:

答案 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}}的最后一个非空实例。