Cómo realizar un recorrido de orden posterior en un árbol binario

Es como las otras dos técnicas transversales: preordenar e inordenar. Es un poco complicado, ya que hacemos un seguimiento del subárbol correcto que tenemos que procesar, después del subárbol izquierdo, antes de procesar el nore actual.

La siguiente es la implementación de Java de la misma. Avíseme si ve algún error / error.

Nodo de clase {
datos int;
Nodo izquierda, derecha;
}

public static void postOrderTraversal (raíz del nodo) {
Pila pila = nueva Pila ();
Nodo curr, anterior;
curr = raíz;
prev = nulo;

// Regresará una vez que la pila esté vacía
while (verdadero) {
// Continúa procesando el subárbol izquierdo
while (curr! = null) {
stack.push (curr);
curr = curr.left;
}

if (stack.isEmpty ()) {
descanso;
}
// Comprueba si tenemos un subárbol correcto para procesar
Nodo top = stack.pop ();
if (top.right == null || top.right == prev) {
System.out.print (“\ t” + top.data);
} más {
// Tenemos un subárbol correcto, necesitamos procesarlo antes del nodo actual
stack.push (arriba);
curr = top.right;
}
prev = arriba;
}
}

Hay tres tipos de recorrido: Pre-orden, en orden y post-orden. Conceptualmente, los algoritmos para ellos se ven así:

Hacer un pedido:

  • Imprimirme
  • Llame a esta función para cada niño no vacío

En orden (solo para árboles binarios):

  • Si el elemento secundario izquierdo no está vacío, llame a esta función para imprimir el elemento secundario izquierdo.
  • Imprimirme
  • Si el elemento secundario correcto no está vacío, llame a esta función para imprimir el elemento secundario correcto.

Orden de publicación:

  • Llame a esta función para cada hijo no vacío.
  • Imprimirme

Cada una de estas funciones toma, como parámetro, un nodo en el trie. Se basa en el hecho de que cada niño en un trie es, en sí mismo, un trie (más pequeño). Inicialmente llama a la función de impresión y pasa el nodo raíz. Aunque parece que la función solo imprime el nodo actual, la recursión en realidad llama a la función una vez por cada nodo en el trie.

Recorrido posterior al pedido: para atravesar un árbol binario en el pedido posterior, se llevan a cabo las siguientes operaciones
(a) Atraviese el subárbol izquierdo,
(b) Atraviese el subárbol derecho, y
(c) Visite el nodo raíz e imprima los datos de ese nodo.

Por lo tanto, el recorrido Postorder del árbol de muestra anterior generará:
15 35 25 75 45

// Impresión posterior al pedido.
privado vacío printTreePostOrder (Node rootNode) {
if (rootNode == nulo)
regreso;
printTreePostOrder (rootNode.getLeft ());
printTreePostOrder (rootNode.getRight ());
System.out.print (rootNode.getData () + “”);
}

Explicación detallada con el programa completo en todos los recorridos de árbol: recorridos de árbol binario: pedido, pedido anticipado, pedido posterior, pedido nivelado

Este es el mejor artículo para visualizar los conceptos:
http: //datastructuresnotes.blogs

Aquí está la respuesta usando pilas:
http://articles.leetcode.com/201

La solución de dos pilas es mucho más fácil de leer pero tiene una mayor complejidad espacial.

Me encanta este artículo Recorrido iterativo posordenar | Conjunto 1 (Uso de dos pilas): GeeksforGeeks Creo que debería ayudar si da algunos detalles más, como exactamente para qué sirve, puedo obtener más detalles

More Interesting

¿Qué es mejor si necesito elegir un camino para mi carrera, algoritmos y estructuras de datos, o tecnologías de big data, en las que estoy trabajando actualmente?

¿Cómo podemos solucionar esto?

¿Cómo mejorarías el algoritmo de autocorrección?

¿Podemos aplicar Ford-Fulkerson a un gráfico de múltiples fuentes y sumideros múltiples?

¿Qué depara el futuro para los algoritmos genéticos y qué tan relevantes serán en 20 años?

¿Cuál es la mejor manera de demostrar sus habilidades como ingeniero de software junior durante una entrevista que no sea la implementación de algoritmos sofisticados y estructuras de datos?

Cómo declarar un conjunto de cadenas de tamaño desconocido para obtenerlo del usuario sin usar la función de asignación en C

¿Cómo explicaría los algoritmos gráficos en términos simples?

¿Por qué no se utilizan algoritmos genéticos?

Si hipotéticamente encontré un algoritmo que genera rendimientos comerciales al 100% anualmente, ¿qué debo hacer con él?

¿Cómo se construye exactamente una estructura de datos de árbol en JavaScript?

¿Cómo encontrar una ruta con la suma máxima en un BST (no BT)?

¿Qué software / algoritmo se usa para hacer partidos de la liga de fútbol o cualquier evento deportivo enorme?

¿Cómo obtuvieron sus nombres los recorridos de árbol binario preorden, inorder y postorder?

¿Alguien ha utilizado un algoritmo genético para resolver la ecuación de Schrodinger (o alguna ecuación diferencial)?