试图编写一个 boolean 方法来告诉某人是否某人的后代...但似乎无法做到这一点。当然,如果它是 child ,则该对象是后代...或 child 的后代。

public boolean isDescendant(member x){
    if (children.contains(x)){
        return true;
    }
    else{
        return false;
    }
}

但我在哪里或如何插入:
for (int i = 0; i < children.size(); i++){
    isDescendant(children.get(i));
}

谢谢!

最佳答案

步行的树木向下(从根到叶子)的速度非常慢。考虑此实现进行is-ancestor检查:

/**
 * Checks whether the given node is an ancestor of this node.
 */
public boolean isDescendantOf(Node ancestor) {
    Preconditions.checkNotNull(ancestor, "Ancestor");
    if (equals(ancestor)) {
        // every node is an ancestor to itself
        return true;
    } else if (parent == null) {
        // not related
        return false;
    } else {
        // recursive call
        return parent.isDescendantOf(ancestor);
    }
}

现在,另一种方法是小菜一碟。
public boolean isDescendant(Node descendant) {
    return descendant.isDescendantOf(this);
}

没有循环,无需费力。

PS:
在我的示例中,我建议将isDescendant重命名为isAncestorOf

关于java - boolean 递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5018997/

10-11 17:21