Ho codifica un mazzo di diverse implementazioni ricerca binaria albero di recente (AVL, splay, treap) e sono curioso di sapere se c'è un modo particolarmente buona di scrivere un iteratore per attraversare queste strutture. La soluzione che ho usato in questo momento è avere ogni nodo i puntatori negozio BST agli elementi precedente e successivo nella struttura, che riduce iterazione ad uno standard lista concatenata iterazione. Tuttavia, io non sono davvero soddisfatto di questa risposta. Aumenta l'utilizzo dello spazio di ciascun nodo da due puntatori (Avanti e Indietro), e in un certo senso è solo barare.
So di un modo di costruire un albero di iteratore binario di ricerca che utilizza O (h) lo spazio di archiviazione ausiliario (dove h è l'altezza dell'albero) utilizzando uno stack per tenere traccia dei nodi di frontiera da esplorare in seguito, ma io' ve resistito codifica questo a causa del l'utilizzo della memoria. Speravo c'è qualche modo per costruire un iteratore che utilizza lo spazio unica costante.
La mia domanda è questa - c'è un modo per progettare un iteratore su un albero binario di ricerca con le seguenti proprietà?
- Gli elementi sono visitati in ordine ascendente (cioè un attraversamento in ordine simmetrico)
next()ehasNext()query eseguite nel tempo O (1) tempo.- L'utilizzo della memoria è O (1)
Per rendere più facile, va bene se si assume che la struttura ad albero non cambia forma durante l'iterazione (cioè senza inserzioni, delezioni, o rotazioni), ma sarebbe davvero bello se ci fosse una soluzione che potrebbe effettivamente gestire questa situazione.













