Intercambio de árboles P25453


Statement
 

pdf   zip

html

Para resolver este problema, recordad que un árbol binario es o bien un árbol vacío, o bien consiste en una raíz y dos subárboles binarios (izquierdo y derecho). El inorden de un árbol binario es una secuencia vacía si el árbol es vacío, y si no es el inorden del subárbol izquierdo, seguido de la raíz, seguida del inorden del subárbol derecho. La altura de un árbol es la longitud del camino más largo desde la raíz hasta cualquier hoja. Un árbol AVL es un árbol binario que es o bien vacío, o bien es tal que sus dos subárboles son AVL, y la diferencia de altura entre ambos es como mucho 1. Una propiedad importante de los árboles AVL es que su altura es logarítmica con respecto al número de nodos.

Como muestra, estos son los tres árboles (iniciales) de los ejemplos de entrada:

[levelsep=25pt,treesep=12pt]50           [levelsep=25pt,treesep=12pt]10 20 40           [levelsep=25pt,treesep=12pt]60 30 10 20 40 90 20

Vosotros debéis implementar eficientemente estas operaciones sobre un árbol AVL:

  • Iu: Intercambia entre sí los subárboles izquierdo y derecho del nodo u.
  • Sk: Escribe la suma de los valores contenidos en los k primeros nodos en inorden del árbol actual, donde 0 ≤ kn.

Entrada

La entrada consiste en diversos casos. Cada caso empieza con el número de nodos n (entre 1 y 217 − 1) de un árbol AVL. Cada una de las n líneas siguientes describe al i-ésimo nodo con tres naturales que indican el valor (entre 1 y 1000) contenido en el nodo, el nodo raíz del subárbol izquierdo, y el nodo raíz del subárbol derecho. Los nodos se numeran del 0 al n−1. Los subárboles vacíos se marcan con −1. La raíz del árbol es siempre el nodo 0. Al final viene un natural p entre n y 4n, seguido de p operaciones.

Salida

Para cada operación de tipo ‘S’, escribid la suma correspondiente. Escribid una línea con 10 guiones al final de cada caso.

Puntuación

  • Test-1:   Entradas donde n ≤ 20, como el Ejemplo de entrada.  30 Puntos 
  • Test-2:   Entradas sólo con operaciones de tipo ‘S’.  30 Puntos 
  • Test-3:   Entradas de todo tipo.  40 Puntos 
Public test cases
  • Input

    1
    50 -1 -1
    3
    I 0
    S 1
    S 0
    
    3
    10 1 2
    20 -1 -1
    40 -1 -1
    7
    S 0
    S 2
    S 3
    I 0
    S 0
    S 2
    S 3
    
    7
    60 2 3
    40 -1 -1
    30 -1 5
    20 1 6
    20 -1 -1
    10 -1 -1
    90 -1 4
    8
    S 0
    S 1
    S 2
    S 3
    S 4
    S 5
    S 6
    S 7
    

    Output

    50
    0
    ----------
    0
    30
    70
    0
    50
    70
    ----------
    0
    30
    40
    100
    140
    160
    250
    270
    ----------
    
  • Information
    Author
    Albert Martínez
    Language
    Spanish
    Official solutions
    C++
    User solutions
    C++