Реализовать класс узла дерева Node

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.