Máxima suma de un camino descendente X58333


Statement
 

pdf   zip   tar

thehtml

Preliminares

Fijaos en el siguiente árbol binario de naturales positivos:

             3
             |
      ------- -------
     |               |
     1               3
     |               |
 ---- ----       ----
|         |     |
4         5     6
          |
           ----
               |
               2

Como podéis observar, hay tres hojas con valores 4, 2 y 6. Si cogemos el camino descendente que nos lleva desde la raíz hasta la hoja con un 4, y vamos sumando todos los valores que encontramos por el camino, obtenemos 3+1+4 = 8. En cambio, si cogemos el camino que nos lleva desde la raíz hasta la hoja con un 2, la suma es 3+1+5+2 = 11. Para el caso de la hoja con un 6, la suma obtenida es 3+3+6 = 12. Por tanto, 12 es la suma máxima que podemos obtener en un camino descendente desde la raíz hasta alguna hoja.

Fin de preliminares

Implementad una función RECURSIVA que, dado un árbol binario de naturales positivos, devuelve la suma máxima que se puede obtener sumando los valores de los nodos que se encuentran en un camino descendente desde la raíz hasta alguna hoja. En el caso del ejemplo de árbol anterior, el resultado de la función sería 12. Esta es la cabecera:

// Pre: t contiene naturales positivos en sus nodos.
// Post: Retorna la suma máxima que se puede obtener sumando los valores que se encuentran en
//       un camino descendente desde la raíz hasta alguna hoja.
int maxSumDescPath(BinTree<int> t);

Fijaos que el enunciado de este ejercicio ya ofrece unos ficheros que tendréis que utilizar para compilar: main.cc, BinTree.hh, maxSumDescPath.hh. Os falta crear el fichero maxSumDescPath.cc con los correspondientes includes e implementar la función anterior. Sólo hace falta que subáis maxSumDescPath.cc al juez.

Entrada

La primera línea de la entrada describe el formato en el que se describen los árboles, o bien INLINEFORMAT o bien VISUALFORMAT. Después vienen un número arbitrario de casos. Cada caso consiste en una descripción de un árbol binario de enteros. Fijaos en que el programa que os ofrecemos ya se encarga de leer estas entradas. Sólo hace falta que implementéis la función antes mencionada.

Salida

Para cada caso, la salida contiene el correspondiente resultado de llamar a la función. Fijaos en que el programa que os ofrecemos ya se encarga de escribir este resultado. Sólo hace falta que implementéis la función antes mencionada.

Observación

Vuestra función y subfunciones que creéis deben trabajar únicamente con árboles. Debéis encontrar una solución RECURSIVA al problema. Evaluación sobre 10 puntos:

  • Solución lenta: 5 puntos.
  • Solución rápida: 10 puntos.

Entendemos como solución rápida una que es correcta, de coste lineal y capaz de superar los juegos de pruebas públicos y privados. Entendemos como solución lenta una que no es rápida, pero es correcta y capaz de superar los juegos de pruebas públicos.

Public test cases
  • Input

    VISUALFORMAT
         7
         |
     ---- ----
    |         |
    2         5
    
            4
            |
     ------- -------
    |               |
    4               4
    |               |
     ----       ----
         |     |
         3     6
    
         4
         |
     ---- ----
    |         |
    2         2
    |
     ----
         |
         3
    
                               6
                               |
                       -------- --------
                      |                 |
                      8                 2
                      |                 |
                  ----              ---- ----
                 |                 |         |
                 7                 5         7
                 |                 |
          ------- -------      ---- ----
         |               |    |         |
         3               5    2         3
         |               |
     ---- ----       ---- ----
    |         |     |         |
    4         2     6         1
    
    3
    
            4
            |
     ------- -------
    |               |
    5               3
    |               |
     ----       ----
         |     |
         1     2
         |
     ---- ----
    |         |
    3         4
    
            5
            |
             ----
                 |
                 6
                 |
          ------- -------
         |               |
         2               2
         |               |
     ---- ----       ---- ----
    |         |     |         |
    5         2     4         8
    
         3
         |
     ---- ----
    |         |
    4         1
              |
               ----
                   |
                   6
                   |
               ---- ----
              |         |
              7         4
    
    4
    
         4
         |
     ---- ----
    |         |
    4         2
    |
     ----
         |
         5
    
    

    Output

    12
    14
    9
    32
    3
    14
    21
    17
    4
    13
    
  • Input

    INLINEFORMAT
    7(2,5)
    4(4(,3),4(6,))
    4(2(,3),2)
    6(8(7(3(4,2),5(6,1)),),2(5(2,3),7))
    3
    4(5(,1(3,4)),3(2,))
    5(,6(2(5,2),2(4,8)))
    3(4,1(,6(7,4)))
    4
    4(4(,5),2)
    5(1(4(1(6,),8),3(6(3,4),1)),4(7,3(,2(5,7))))
    5(7(3(3(,6(5,7)),8(,5)),),3(6(2(,5),2(3(,6),1(,4))),))
    8(2(7,),)
    6(8,5)
    3(3(,7),6(3,))
    5(1(4(2,),8(2(4,),2(7,))),1(,6(7(,5),2(4,3))))
    5(6(5,5),2(,8))
    5(6(6(7,3),1(5,1(,3(,2)))),6)
    3
    2(5(7,4),5(1,))
    

    Output

    12
    14
    9
    32
    3
    14
    21
    17
    4
    13
    21
    31
    17
    14
    13
    24
    16
    24
    3
    14
    
  • Information
    Author
    PRO2
    Language
    Spanish
    Translator
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++