¿Cuál es la mejor manera de implementar un iterador para un BST?

Para optimizar la sobrecarga de espacio total para un solo recorrido cuando los nodos carecen de punteros principales, sin pasar iteradores por valor, a expensas de mantener el árbol bloqueado durante su duración, mantenga una pila. La pila se agrega descendiendo la rama izquierda, empujando a medida que avanza. Inicialice su iterador haciendo eso comenzando en el nodo raíz tge. Al obtener el siguiente, devuelva la parte superior de la pila, revísela y agregue comenzando por su hijo derecho. Termine cuando la pila esté vacía. La sobrecarga de espacio es proporcional a la profundidad del árbol para cada recorrido simultáneo, que es el tamaño del árbol en el caso degenerado, aunque en el mundo real debería usar una variante de árbol BS equilibrada, generalmente un árbol rojo-negro.

Para permitir modificaciones en el árbol, excepto en los nodos a los que se hace referencia, permita pasar iteradores por valor a bajo costo y admita múltiples iteradores paralelos para que su iterador sea un puntero de nodo e incluya un puntero principal en cada nodo. Con un hijo derecho, el siguiente nodo es su descendiente más a la izquierda. De lo contrario, es el primer antepasado a la derecha donde el puntero izquierdo del antepasado se refiere a su hijo. Comience en el descendiente más a la izquierda de la raíz y termine cuando presione un puntero NULL padre buscando el antepasado correcto.

Empujar todo el árbol con un recorrido de orden inverso tiene la mayor sobrecarga en el caso promedio, que se multiplica por el número de recorridos simultáneos, y no puede mutar el árbol mientras se itera sobre él.

More Interesting

¿Cuál es la lógica y la intuición detrás del algoritmo de optimización de momento y por qué se considera mejor que el descenso de gradiente?

¿Cuáles son algunos algoritmos de búsqueda rápida de similitud y estructuras de datos para vectores de alta dimensión?

¿Puede un algoritmo descubrirse a sí mismo?

¿Cuál es la última actualización del algoritmo SEO de Google en 2017?

¿Hay algún proceso o conjunto de preguntas que uno debería hacer al resolver problemas tácticos de ajedrez?

¿Qué tipo de algoritmos / pruebas / procedimientos analíticos se utilizan en el comercio minorista y para estudiar el comportamiento del consumidor?

En F (n) -F (n-1) = n ^ 8, ¿qué es F (n)?

¿Cuál es la técnica de clasificación eficiente para organizar los libros en una biblioteca?

¿Cuáles son algunas aplicaciones prácticas del sistema binario?

¿Cómo están sucediendo los campos de entrenamiento de algoritmos?

¿Qué algoritmos son buenos candidatos para el reconocimiento de sonido? Estoy principalmente interesado en reconocer sonidos en un entorno doméstico, por ejemplo, un temporizador de microondas que suena, un teléfono que suena, un timbre, etc.

¿Por qué Java utiliza una implementación mediocre de hashCode para cadenas?

¿Cuáles son los algoritmos necesarios para resolver un cubo de rubics?

¿Cuál sería un buen método o algoritmo para predecir el ganador de una carrera de caballos, dada una gran cantidad de información sobre las carreras de caballos?

Programación competitiva: dado un polígono y tres cuadrados congruentes alineados con el eje, ¿puede determinar en tiempo polinómico si el polígono puede cubrirse por completo de manera que los tres cuadrados, que pueden superponerse, cubran una cantidad igual de área en el polígono?