#pragma once #include "ifaces/INode.h" #include "iterators/DFSIterator.h" #include "iterators/BFSIterator.h" namespace traversal { /// \brief Фабрика итераторов узлов дерева. /// \tparam T Тип алгоритма для обхода дерева. /// Конструирует итерируемый объект с заданным алгоритмом обхода. Например, в ширину /// или глубину. template class Traversal { INode* start; public: explicit Traversal(INode* start) : start(start) {} explicit Traversal(NodePtr start) : start(start.get()) {} Policy begin() const { return Policy(start); } Policy end() const { return Policy(nullptr); } }; using DFS = Traversal>; using BFS = Traversal>; }