Реализация итератора над двоичным (или произвольным) деревом с использованием C ++ 11

Я хотел бы создать итератор над двоичным деревом, чтобы иметь возможность использовать цикл for на основе диапазона. Я понимаю, что я должен сначала реализовать функции begin () и end ().

Начало должно, вероятно, указывать на корень. Однако согласно спецификации функции end () возвращаютэлемент, следующий за последним действительным элементом ", Какой это элемент (узел)? Не было бы незаконно указывать на некоторых "недействительным" место?

Другое дело оператор ++. Какой самый лучший способ вернутьсяследующий" элемент в дереве? Мне просто нужен совет, чтобы начать с этого программирования.

Я хотел бы расширить / дополнить свой вопрос *. Что если я захочу перебрать дерево с произвольной арностью? Пусть у каждого узла есть вектор детей, и пусть begin () указывает на "реальный» корень. Я, вероятно, должен был бы реализовать очередь (в ширину) внутри класса итератора для хранения unique_ptr 'с узлами, верно? Затем, когда очередь пуста, я знаю, что я прошел все узлы и, следовательно, должен возвращать TreeIterator (nullptr) при вызове oprator ++ (). Имеет ли это смысл? Я хочу, чтобы это было максимально просто и только вперед итерацией.

* Или я должен создать новую тему?

Ответы на вопрос(3)

Ваш ответ на вопрос