Исходный код EJIO.utils.struct.tree

## /utils/struct/tree.py

from abc import abstractmethod
from typing import Protocol, Iterable
from collections.abc import Generator
from typing import Any
from ..interface import StaticClass
from .stack import Stack
from .queue import Queue


__all__ = [
    'TreeNode',
    'TreeTraverser',
]


[документация] class TreeNode(Protocol): """ Абстрактный протокол, описывающий минимальный контракт для узла любого дерева. """ __slots__ = () @property @abstractmethod def value(self) -> Any: """ Возвращает полезную нагрузку (данные), хранящуюся в узле. :return: Значение хранящееся в узле. :raises NotImplementedError: Должен быть реализован в подклассе. """ raise NotImplementedError @property @abstractmethod def children(self) -> Iterable['TreeNode']: """ Возвращает итерируемый объект со всеми дочерними узлами (потомками). :return: Итератор по всем дочерним узлам. :raises NotImplementedError: Должен быть реализован в подклассе. """ raise NotImplementedError
[документация] @abstractmethod def destroy(self) -> None: """ Каскадно уничтожает текущий узел и всех его потомков, разрывая циклические ссылки и высвобождая память. :raises NotImplementedError: Должен быть реализован в подклассе. """ raise NotImplementedError
def __del__(self) -> None: """Очищает память при удалении объекта, чтобы избежать рекурсии.""" self.destroy()
[документация] class TreeTraverser(StaticClass): """ Статический алгоритмический движок для итеративного обхода древовидных структур. Работает с любыми деревьями, поддерживающими протокол TreeNode. """ __slots__ = ()