He estado codificar hasta un montón de diferentes implementaciones de búsqueda binaria de árboles recientemente (AVL, ensanchamiento, Treap) y estoy ansioso por ver si hay una manera particular buena para escribir un iterador para recorrer estas estructuras. La solución que he usado en este momento es que cada nodo en los almacenan punteros BST a los elementos anterior y siguiente en el árbol, lo que reduce la iteración a un estándar-lista enlazada iteración. Sin embargo, no estoy realmente satisfecho con esta respuesta. Aumenta el uso de espacio de cada nodo por dos punteros (anterior y siguiente), y en cierto sentido es sólo hacer trampa.
Yo sé de una manera de construir un iterador árbol binario de búsqueda que utiliza O (h) el espacio de almacenamiento auxiliar (donde h es la altura del árbol) mediante el uso de una pila para realizar un seguimiento de los nodos frontera para explorar más adelante, pero yo he resistido a la codificación de esto, debido a la utilización de la memoria. Tenía la esperanza de que hay alguna manera de construir un iterador que utiliza el espacio único constante.
Mi pregunta es la siguiente - ¿hay alguna manera de diseñar un iterador sobre un árbol binario de búsqueda con las siguientes propiedades?
- Los elementos se visitaron en orden ascendente (es decir, un recorrido en orden)
next()yhasNext()consultas se ejecutan en O (1) tiempo.- El uso de memoria es O (1)
Para hacerlo más fácil, está bien si se asume que la estructura de árbol no está cambiando de forma durante la iteración (es decir, sin inserciones, deleciones o rotaciones), pero sería genial si había una solución que, efectivamente, podría manejar esto.













