java - 如何在 Java 中设置/赋予父节点其子节点、其子节点的子节点等等?

标签 java nodes

我有课EightPuzzle

public class EightPuzzle {

int[][] board = new int[3][3];
//code here
}

我在哪里上课Node<T>哪里T是对象EightPuzzle 。如果我有一个Node<EightPuzzle> parent ,我如何设置它的 child ?是 child 的 child 吗?依此类推,如果 children 是 ArrayList<Node<EightPuzzle>>

public class Node<T> {

private List<Node<T>> children = new ArrayList<Node<T>>();
private Node<T> parent = null;
private T data = null;

public Node(T data) {
    this.data = data;
}

public Node(T data, Node<T> parent) {
    this.data = data;
    this.parent = parent;
}

public List<Node<T>> getChildren() {
    return children;
}

public void setParent(Node<T> parent) {
    parent.addChild(this);
    setParentInternal(parent);
}
public void setParentInternal(Node<T> parent){
    this.parent = parent;
}

public void addChild(T data) {
    addChild(new Node<T>(data));
}
public void addChild(Node<T> child) {
    child.setParentInternal(this);
    this.children.add(child);
}

//may not use this and set data
public T getData() {
    return this.data;
}

public void setData(T data) {
    this.data = data;
}

public boolean isRoot() {
    return (this.parent == null);
}

public boolean isLeaf() {
    if(this.children.size() == 0) 
        return true;
    else 
        return false;
}

public void removeParent() {
    this.parent = null;
}

最佳答案

您可能想要使用递归方法来执行如下所示的操作。

示例:

public void assignChildren(Node node) {
    List<Node> children = ... // somehow decide the children here
    node.setChildren(children);

    // This is just a for each loop using a java 8 method reference 
    // to make a recursive call 
    children.forEach(this::assignChildren); 
}

编辑: 将评论移至答案

如果您无法在类中添加 setChildren(...) 方法,那么您始终可以迭代子级,将它们一一添加到节点

关于java - 如何在 Java 中设置/赋予父节点其子节点、其子节点的子节点等等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677335/

相关文章:

Java 链表问题

angular - 排除破坏 Angular Universal 的组件

java - Cassandra 是否有可能返回不一致的值?

java - hibernate 一个iPOJO组件,全部禁用

java - Flutter & Android : Your build is currently configured to use Java 17. 0.2 和 Gradle 7.0.2

java - 如何使用 JFileChooser 添加双反斜杠而不是单个反斜杠

java - 使用 Objectify 进行查询过滤

c++ - 将前一个节点的地址存储到当前节点的 “prev”部分中

java - 为单个字符串设置字体?

c++ - 链表插入问题