Me gustaría crear un iterador sobre el árbol binario para poder usar el bucle for basado en rango. Entiendo que debería implementar primero la función begin() y end().Implementación de un iterador sobre árbol binario (o arbitrario) usando C++ 11
Begin debería apuntar probablemente a la raíz. De acuerdo con la especificación, sin embargo, la función end() devuelve "el elemento que sigue al último elemento válido". ¿Qué elemento (nodo) es eso? ¿No sería ilegal señalar algún lugar "inválido"?
La otra cosa es el operador ++. ¿Cuál es la mejor manera de devolver el elemento "siguiente" en el árbol? Solo necesito algunos consejos para comenzar con esta programación.
Quiero agradecer/ampliar mi pregunta *. ¿Qué pasaría si quisiera iterar sobre un árbol con una aridad arbitraria? Deje que cada nodo tenga un vector de elementos secundarios y permita que begin() señale la raíz "real". Probablemente tendría que implementar una cola (para amplitud primero) dentro de la clase de iterador para almacenar el unique_ptr en nodos, ¿verdad? Entonces, cuando la cola esté vacía, sabré que he pasado todos los nodos y, por lo tanto, debería devolver TreeIterator (nullptr) cuando se llame a oprator ++(). ¿Tiene sentido? Lo quiero tan simple como sea posible y solo reenvío la iteración.
* ¿O debería crear un nuevo hilo?
Su iterador 'end()' probablemente termine siendo un valor centinela que no sea un nodo real en el árbol. –