Nota : Explicación debajo del pseudocódigo.
Una pila extra para mantener.
int sum (nodo)
{
si nodo-> izquierda = NULL y nodo-> derecha = NULL
nodo de retorno-> valor
- ¿Hay un paquete de Python que calcule la complejidad del tiempo?
- ¿Qué se debe saber o hacer antes y al escribir un algoritmo?
- ¿Cómo funciona el 'algoritmo tabula rasa' de AlphaGo Zero?
- ¿Qué tan preciso es el algoritmo de predicción de personalidad de Faception?
- ¿Hay algún proceso o conjunto de preguntas que uno debería hacer al resolver problemas tácticos de ajedrez?
más si nodo-> left = NULL
nodo de retorno-> valor + suma (nodo -> derecha)
más si nodo -> derecha = NULL
nodo de retorno-> valor + suma (nodo -> izquierda)
más
return node-> value + max (sum (node -> right), sum (node -> left))
}
vacío maxsumpath (nodo)
{
si nodo-> izquierda = NULL y nodo-> derecha = NULL
empujar el nodo a la pila
regreso
más si nodo -> left = NULL
maxsumpath (nodo -> derecha)
empujar el nodo a la pila
más si nodo -> derecha = NULL
maxsumpath (nodo -> izquierda)
empujar el nodo a la pila
más
si suma (nodo -> izquierda) derecha)
maxsumpath (nodo -> derecha)
empujar el nodo a la pila
más
maxsumpath (nodo -> izquierda)
empujar el nodo a la pila
}
principal ()
{
variables maxsum y nodemax
para cada nodo en el árbol:
Temporal_sum = nodo -> val + suma (nodo-> izquierda) [si existe nodo-> izquierda] + suma (nodo-> derecha) [si existe nodo-> derecha]
if maxsum> temporary_ sum
maxsum = temporary_sum
nodemax = nodo
maxsumpath (nodemax-> right) [si existe]
empuje nodemax en la pila
maxsumpath (nodemax-> left) [si existe]
pop todos los elementos de la pila para obtener la ruta.
}
Explicación:
1. la función sum calcula la suma máxima que se puede obtener hasta ese nodo desde una hoja.
2. maxsumpath imprime la ruta que se siguió para obtener la suma de nodemax.
3. Los elementos se insertan en la pila en el orden inverso para que se muestren en el orden correcto.
Mejora de la eficiencia: O total (n)
1. Llame a la función de suma en orden creciente de altura de los nodos para todos los nodos y almacene los valores de suma.
2. Utilice valores calculados previamente para calcular los valores de suma para nuevos nodos. (Enfoque de programación dinámica)
Suposición: La entrada consiste en números positivos.
Espero que sea claro y resuelva la duda.