Encontré un problema algorítmico interesante. Nos da un árbol binario que tiene un valor 0 en cada vértice aparte de las hojas. En las hojas tenemos dos opciones:Sumas equilibradas en árbol binario
valor es desconocido, pero sabemos que es un número natural es conocida> = 1
valor y es un número natural> = 1
El problema es decidir si es posible establecer cada valor desconocido en las hojas de manera que cada subárbol de un árbol dado tenga la misma suma de valores en los vértices en su subárbol izquierdo y derecho.
Por ejemplo:
tree1:
0
/\
0 ?
/\
0 5
/\
? ?
la respuesta es no - no teniendo en cuenta que cada signo de interrogación tiene que ser un número natural, es posible, por supuesto
árbol2:
0
/ \
0 0
/\ /\
0 10 ? ?
/\
5 ?
La respuesta es SÍ - establecemos: 5, 10, 10 respectivamente en cada signo de interrogación.
Hasta ahora, surgió solo con un algoritmo obvio: creamos un sistema de ecuaciones lineales y verificamos si tiene una solución en números naturales. Pero creo que puede ser muy lento para árboles grandes y debería ser una mejor forma de resolverlo. ¿Alguien puede ayudar? Estaría muy agradecido.
Siempre se puede tratar de dibujar el árbol en un bloque de código: | – Alexander
no crees un gran sistema de ecuaciones, sino crea pequeñas, resuélvelas, luego completa los resultados y busca el siguiente subproblema. –