Esto puede ser muy ingenuo, pero me preguntaba, el contexto de los árboles binarios (simples, ordenados y equilibrados), de todos los tipos transversales:
- profundidad de pre-orden
- profundidad primero en orden
- profundidad de primer pedido
- ancho primero
¿Cuál es la utilidad real de los pre y post orden? Quiero decir, ¿hay algún tipo y / o configuración de árbol binario en el que el recorrido previo y / o posterior al pedido daría (alguna) ventaja (s) sobre los otros dos?
AFAICS, hay ciertos tipos y configuraciones de árboles binarios para los cuales, en orden y amplitud, pueden dar cierta ventaja:
para un árbol binario equilibrado, cualquier recorrido de profundidad primero usará menos espacio de almacenamiento de memoria en comparación con la amplitud primero (por ejemplo, para un árbol binario equilibrado de 6 o 7 nodos, la altura es 2, por lo que cualquier recorrido de profundidad primero necesitará almacenar un máximo de 2 nodos en un momento dado, mientras que el último nivel tiene 3 o 4 nodos, por lo que el recorrido transversal primero necesitaría almacenar hasta 3 o 4 nodos en algún momento). En este caso, el uso del recorrido en orden utiliza la menor cantidad de memoria y visita los nodos en su orden natural.
para un árbol binario no equilibrado, si está cerca del peor escenario de inserción, atravesarlo primero en amplitud usaría menos memoria en comparación con cualquiera de los primeros recorridos en profundidad. Entonces, en este caso, la amplitud ofrece una ventaja. El recorrido en orden tiene nuevamente la ventaja de visitar valores en su orden natural.
Sin embargo, no puedo pensar en una situación en la que antes y después del recorrido darían una ventaja sobre los otros dos.
fuente
A + B * C
, que es mucho más fácil de entender para los usuarios normales que cualquier prefijo de orden postfix.El artículo de wikipedia tiene una buena descripción concisa de cuándo desea utilizar los diferentes tipos de búsqueda en profundidad:
Se reduce a las necesidades logísticas de un algoritmo. Por ejemplo, si no utiliza el recorrido de orden posterior durante la eliminación, pierde las referencias que necesita para eliminar los árboles secundarios.
fuente
El punto de tener diferentes algoritmos para tratar con árboles binarios no es hacer cosas con árboles. En este nivel abstracto, un orden es en gran medida tan bueno como cualquier otro, ya que solo se obtienen símbolos abstractos del procedimiento.
Pero los árboles se usan típicamente para representar cosas interesantes, y eso puede hacer una gran diferencia en el resultado. Por ejemplo, si los nodos representan estados de búsqueda en una búsqueda completa a través de un gran dominio (tal vez incluso un dominio infinito), descender primero frente a procesar primero no solo determina en qué orden se encuentran los resultados, sino que incluso puede determinar si alguna vez encuentre cualquier solución en absoluto . El punto es más fácil de ver con dominios infinitos: si desciendes con cautela, podrías pasar por alto una solución que se encuentra bastante arriba en el árbol, simplemente porque tomaste un giro equivocado. Pero en la práctica, dado que la memoria y los discos también son finitos, esto incluso se aplica a dominios que son simplemente muy grandes en lugar de realmente infinitos.
fuente