Está en la página 1de 4

Estructura de Datos - Evaluación Continua y Prueba final

Examen Teoría Segundo Parcial - 27 de Mayo de 2022

Apellidos……………………………………………………………………………

Nombre………………………………. DNI/Pasaporte: …………...……..

Ejercicio 1 (5 puntos)
Sea un TAD Arbol que implementa un árbol binario de valores enteros, con las siguientes vistas públicas
y privadas:

Arbol: NodoArbol:
private NodoArbol raiz private int dato
public Arbol() // Constructor private NodoArbol izquierdo, derecho
public Arbol(int dato) //Constructor public NodoArbol(int dato, NodoArbol izquierdo,
NodoArbol derecho) // Constructor
public NodoArbol getIzquierdo()
public NodoArbol getDerecho()
public int getDato()
public void setDato(int dato)
public void setIzquierdo(NodoArbol izquierdo)
public void setDerecho(NodoArbol derecho)

SE PIDE:
Codificar en Java el siguiente método de la clase Arbol:
public void diferenciar()
que modifique el dato de cada nodo del árbol con la diferencia entre la suma de todo su subárbol derecho
y la suma de todo su subárbol izquierdo. Si un nodo no tiene hijo izquierdo, la suma de su subárbol
izquierdo se considera como 0. Lo mismo aplica si el nodo no tiene hijo derecho.
EJEMPLOS: En nodo raíz: árbol derecho suma 2,
árbol izquierdo suma 3, valor
resultante 2 - 3 = -1

En nodo raíz: árbol derecho


suma 16, árbol izquierdo suma
10, valor resultante 16 - 10 = 6

NORMAS DE OBLIGADO CUMPLIMIENTO (su no observación supondría la calificación de 0 puntos):


• Queda expresamente prohibida la utilización de atributos u operaciones no definidas en las clases.
• Sólo se permite la realización de un único recorrido en el árbol.
• No se permite utilizar ninguna estructura de datos auxiliar.
• Responder sobre esta misma hoja. No se permitirá la entrega de hojas adicionales.

DURACIÓN TOTAL DEL EXAMEN: 1 hora 40 minutos


Fechas previstas: Publicación de resultados: 10-6-2022. Revisión de examen: 14-6-2022
Solución:
public void diferenciar() {
diferenciar(raiz);
}
private int diferenciar(NodoArbol nodo) {
int res;
if (nodo == null) res = 0;
else {
int leftVal = diferenciar(nodo.getIzquierdo());
int rightVal = diferenciar(nodo.getDerecho());
res = leftVal + rightVal + nodo.getDato();
nodo.setDato(rightVal - leftVal);
}
return res;
}
Estructura de Datos - Evaluación Continua y Prueba final
Examen Teoría Segundo Parcial - 27 de Mayo de 2022

Apellidos……………………………………………………………………………

Nombre………………………………. DNI/Pasaporte: …………...……..

Ejercicio 2 (5 puntos).
Sea un TAD GrafoLA para grafos dirigidos, implementado con listas de adyacencias, con las siguientes
vistas públicas y privadas:

GrafoLA: ListaCalificada:
private int numVertices public ListaCalificada() //Constructor
private ListaCalificada[ ] listasAdy public boolean vacia()
public GrafoLA(int numVertices) public int getNumElementos()
//Constructor public Iterador getIterador()
public boolean insertar(int clave)
Iterador:
public boolean contiene(int clave)
public boolean hasNext()
public boolean borrar(int clave)
public int next()

SE PIDE:
Codificar en Java el siguiente método de la clase GrafoLA:
public ListaCalificada verticesConAdyacentesPares()
que devuelva una ListaCalificada con los vértices v del grafo que cumplan la siguiente condición: al
menos sale una arista de v, y todas las aristas que salen de v se dirigen a vértices con numeración par.
EJEMPLO:
Sea el siguiente grafo dirigido:
El vértice 0 no cumple la condición porque sale una arista a 1 (impar).
El vértice 1 sí cumple la condición porque salen aristas a 2 y 4 (pares).
El vértice 2 no cumple la condición por tener arista con el 3. El vértice
3 sí cumple la condición porque sólo sale una arista a el 4. Finalmente,
el vértice 4 no cumple la condición al no salir ninguna arista de él.
Por tanto, el resultado de la ejecución del método en este grafo sería
una ListaCalificada con los valores 1 y 3.
OBSERVACIONES:
• Si en el grafo no hay ningún vértice que cumpla la condición, el método devolverá una
ListaCalificada vacía (sin elementos).
• En la solución deberán optimizarse los recorridos realizados sobre las listas de adyacencias.

NORMAS DE OBLIGADO CUMPLIMIENTO (su no observación supondría la calificación de 0 puntos):


• Queda expresamente prohibida la utilización de atributos u operaciones no definidas en las clases.
• Excepto la ListaCalificada que se debe devolver, no se permite usar estructuras de datos auxiliares.
• Responder sobre esta misma hoja. No se permitirá la entrega de hojas adicionales.

DURACIÓN TOTAL DEL EXAMEN: 1 hora 40 minutos


Fechas previstas: Publicación de resultados: 10-6-2022. Revisión de examen: 14-6-2022
Solución:
public ListaCalificada verticesConAdyacentesPares() {
ListaCalificada resultado = new ListaCalificada();
for (int i = 0; i < numVertices; i++) {
if (listasAdy[i].getNumElementos() > 0) {
Iterador iterador = listasAdy[i].getIterador();
boolean esPar = true;
while (iterador.hasNext() && esPar) {
if (iterador.next() % 2 != 0) {
esPar = false;
}
}
if (esPar) {
resultado.insertar(i);
}
}
}
return resultado;
}

Ejercicio 3 (1 punto)
Solución:
Sea una tabla hash con las siguientes características:
• Tamaño de la tabla N = 10 posiciones.
• Hashing cerrado. Cuando hay colisión se realiza una
inspección lineal a la siguiente posición libre.
• Las claves son valores enteros de 4 cifras (de 0000 a
9999).
• La función hash realiza el resto de la división por N:
h(k) = k % N.
SE PIDE:
Representar cómo quedaría la tabla hash después de insertar
cinco elementos con las siguientes claves y en el siguiente
orden:
1002, 5408, 1332, 2203, 5403
Contestar en esta misma hoja, en el espacio indicado.

También podría gustarte