77. Реализовать класс узла дерева Node
Условие задачи:
Реализовать класс Node, представляющий узел древовидной структуры.
Каждый узел должен содержать:
целочисленное значение
value;список дочерних узлов.
Базовая структура класса:
class Node {
private int value;
private List<Node> nodes;
}
Необходимо корректно описать класс и предусмотреть возможность создавать узлы и добавлять к ним дочерние элементы.
Спойлеры к решению
Подсказки
💡 Так как каждый Node может содержать другие объекты Node, такая структура является рекурсивной.
💡 Список дочерних элементов лучше инициализировать при создании объекта, чтобы избежать NullPointerException.
💡 Для работы с полями можно добавить конструктор и методы доступа.
Решение
Узел дерева может хранить собственное значение и произвольное количество дочерних узлов.
Для хранения потомков используем List<Node>.
import java.util.ArrayList;
import java.util.List;
public class Node {
private int value;
private List<Node> nodes;
public Node(int value) {
this.value = value;
this.nodes = new ArrayList<>();
}
public int getValue() {
return value;
}
public List<Node> getNodes() {
return nodes;
}
public void addNode(Node node) {
nodes.add(node);
}
}
Пример использования:
public class Main {
public static void main(String[] args) {
Node root = new Node(1);
Node firstChild = new Node(2);
Node secondChild = new Node(3);
root.addNode(firstChild);
root.addNode(secondChild);
}
}
Получается структура вида:
1
├── 2
└── 3
Такой класс позволяет представить дерево произвольной глубины, поскольку каждый дочерний Node в свою очередь может содержать собственный список дочерних узлов.
Инициализация списка в конструкторе гарантирует, что при добавлении первого дочернего элемента поле nodes уже будет содержать объект списка, а не null.