You are on page 1of 12

Para la resolucin de los ejercicios, se dispone de una implementacin de rbol binario a travs de la clase BinTree con la siguiente especificacin.

public class BinTree { public BTNode root; // la raiz del arbol // devuelve la raiz del rbol; public BTNode getRoot() // ubica el elemento pRoot como raiz del rbol public void setRoot(BTNode pRoot) // devuelve la informacin de la raiz public Object getRootInfo() }

A su vez los mtodos disponibles en la clase BTNode son los siguientes:


public class BTNode { public Object content; public BTNode leftChild; public BTNode rightChild; //Crea un nodo cuyo contenido est en theInfo public BTNode(Object theInfo) // devuelve la informacin del Nodo public Object content

A su vez se dispone de la clase Iteradora sobre un arbol Binario BinTreeItr con la siguiente especificacin
public class BinTreeItr { public BinTree bTree; ......... } Los metodos que se pidan en todos los ejercicios se implementarn dentro de esta clase iteradora

(J94) Disear y escribir en Java la funcin mismaEstructura, tal que dados dos rboles binarios diga si estos tienen o no la misma estructura (misma estructura significa que los rboles son iguales, excepto los valores de los nodos). En el ejemplo de la figura mismaEstructura(arbol_1, arbol_2) devolvera true mientras que mismaEstructura(arbol_1, arbol_3) devolvera false.
arbol_1 A B C E D F L F A arbol_2 Z O F M W A U arbol_3 T S

(S94) Disear y escribir en Java la funcin numNodos tal que dado un rbol binario y un nivel (nmero positivo) devuelva el nmero de nodos que se encuentran en el rbol en dicho nivel. En la figura, por ejemplo: numNodos(arbol_ejemplo, 1) devolvera 1 numNodos(arbol_ejemplo, 3) devolvera 4 numNodos(arbol_ejemplo, 5) devolvera 2

a r b o l _ e j e m p lo

Z F L A O F W

T S A M U

(J95) Disear y escribir en Java un subprograma tal que dado un rbol binario de enteros(Integer), determine si dicho rbol est equiponderado. Un rbol binario est equiponderado si se cumple que para todo nodo el peso del subrbol izquierdo es igual al peso del subrbol derecho. El rbol binario vaco est equiponderado por definicin. Llamamos peso de un rbol a la suma de todos sus elementos.
Ejemplo de rboles equiponderados:
1 4 2 1 2 0 2 8 2 12 4 2 0 -3 13 34 -3

(S95) Disear y escribir en Java un subprograma tal que dado un rbol binario y una lista ligada(con su iterador ListaLigadaItr), determine si la lista coincide exactamente con alguna rama completa del rbol. Una rama del rbol es completa si partiendo de la raz acaba en alguna de las hojas.
a b d h b e i

Ejemplo de lista ligada que SI coincide exactamente con alguna de las ramas completas del rbol de la figura:

Ejemplos de listas que NO coinciden exactamente con ninguna de las ramas completas del rbol anterior:

a b a a

e e b

b h e

h b

(J96) public class Nodo extends Object { int dato; int profundidad; int claseDeHijo; } Disear y escribir en Java un subprograma tal que dado un rbol binario de elementos de tipo Nodo, devuelva el mismo rbol pero etiquetado. Esto es, que cada nodo del rbol contenga en su subcampo profundidad la informacin correspondiente a la profundidad del subrbol que comienza en ese nodo, y en el subcampo claseDeHijo el valor 0 si se trata del nodo raz del rbol, -1 si es raz de un subrbol izquierdo y 1 si es raz de un subrbol derecho.
2 8 10

2 4 0 8 3 -1 10 2 1

1 2 -1

7 2 1

5 1 1

2 1 1

0 1 -1

3 1 1

(S96) Disear y escribir en Java un subprograma tal que dado un rbol binario, devuelva una lista que contenga los elementos de la rama ms larga del rbol de entrada. Si hubiera varias ramas con la misma profundidad, la lista contendra los elementos de una cualquiera de ellas (como ocurre en el ejemplo de la segunda figura).

3 2 3 2 5 5 1 3 2 5 2 La lista asociada ser

3 5 2 7 4 1 5 1 4 3 5 1 4 La lista asociada ser

(J97) public class BTNode { public int info; public int equilibrio; private BTNode leftChild; private BTNode rightChild; } Disear y escribir en Java un subprograma tal que dado un rbol binario de nodos de tipo BTNode haga dos cosas: 1. Por un lado, etiquete el campo equilibrio de cada nodo de la siguiente manera: Con un 0 si las profundidades de sus subrboles son iguales. Con la diferencia de profundidad entre los dos subrboles. Este nmero ser negativo si el subrbol izquierdo tiene mayor profundidad que el derecho y positivo en caso contrario. 2. Por otro lado, el subprograma devolver un valor booleano True si el rbol es equilibrado y False en caso contrario. Nota: se dice que un rbol es equilibrado si para cada nodo la profundidad de sus subrboles es la misma o difiere a lo sumo en 1. Ejemplos:
A B C D E F C,0 B,+1 D,+1 A,-2 F,0

A B C D E C,0 B,-1

A,0 D,+1 E,0

E,0

rbol de entrada

rbol de salida etiquetado y no es equilibrado

rbol de entrada

rbol de salida etiquetado y es equilibrado

(S97) Disear y escribir en Java un subprograma que dado un rbol binario de elementos de tipo char y un nivel, devuelva el nmero de nodos que tiene dicho rbol, en el nivel dado, cumpliendo al mismo tiempo que: son hojas y son hijos izquierdos. Ejemplos:

Si el nivel es 1, el resultado debe ser 0 Si el nivel es 2, el resultado debe ser 0 Si el nivel es 3, el resultado debe ser 2

Si el nivel es 1, el resultado debe ser 0

Si el nivel es 1, el resultado debe ser 0 Si el nivel es 2, el resultado debe ser 1

(J98) Se dice que un nodo de un rbol binario tiene grado 2 cuando los subrboles izquierdo y derecho son distintos de vaco. Se dice que un rbol binario es 2-equilibrado cuando bien es el rbol vaco, o bien se cumplen al mismo tiempo las siguientes condiciones: El subrbol izquierdo es 2-equilibrado. El subrbol derecho es 2-equilibrado. El nmero de nodos de grado 2 en el subrbol izquierdo coincide con el nmero de nodos de grado2 en el subrbol derecho. Disear y escribir en Java un subprograma tal que dado un rbol binario devuelva si el rbol es 2-equilibrado.

Ejemplos: (representamos los nodos de grado 0 o 1 con y los de grado 2 con )

Arbol 2-equilibrado (sin nodos de grado 2)

Arbol no 2-equilibrado (un nodo de grado 2)

Arbol 2-equilibrado (sin nodos de grado 2)

Arbol no 2-equilibrado (2 nodos de grado 2)

Arbol 2-equilibrado (un nodo de grado 2)

Arbol no 2-equilibrado (5 nodos de grado 2)

Arbol 2-equilibrado (7 nodos de grado 2)

Arbol no 2-equilibrado (2 nodos de grado 2)

(S98) Se dice que un rbol binario arbol1 es prefijo de otro rbol binario arbol2, cuando arbol1 coincide con la parte inicial del rbol arbol2 tanto en el contenido de los elementos como en su situacin. En el siguiente ejemplo arbol1 es prefijo de arbol2:

65 37 47 81 93 37

65 81

22 47 76 93 11 29 85 94

arbol1

arbol2

Disear y escribir en Java un subprograma tal que dados dos rboles binarios, arbol1 y arbol2, decida si arbol1 es prefijo de arbol2. En los siguientes ejemplos arbol1 no es prefijo de arbol2:

65 37 47 81 93 37 22 11 29 arbol1
65 37 93 81 37 22 11 29 arbol1

65 81 76 93 85 94

arbol2
65 81 76 93 85 94

arbol2

(1) Disear y escribir en Java un mtodo tal que dado un rbol, devuelva el nmero de nodos hoja del rbol que cumplan lo siguiente: En la rama que une la raz del rbol con la hoja hay un nmero de nodos (que nos viene dado) que tiene exactamente uno de sus subrboles vaco. (2) Disear y escribir en Java un mtodo recursivo, que devuelva la lista de los nodos hoja del rbol que cumplen los requisitos del problema anterior.
Arbol de entrada N antecesores Lista dado obtenida 2 A

Arbol de N antecesores Lista entrada dado obtenida 2 A C

Arbol de N antecesores entrada dado 0 A

Lista obtenida B C

B C

B C

(3) Dado un rbol binario de elementos de tipo carcter, un nmero de nivel y un caracter, disea e implementa un mtodo Java que cuente el nmero de nodos de ese nivel que contiene el carcter dado. (4) Dado un rbol binario de elementos de tipo carcter, y dado un nmero de nivel, disea e implementa un mtodo Java que obtenga la lista de caracteres almacenados en ese nivel del rbol. (5) Dado un rbol binario, disea e implementa un mtodo Java que lo transforme en su imagen especular. (6) Dado un rbol binario, disea e implementa un mtodo Java que cree un nuevo rbol que sea su imagen especular. (7) Dados dos rboles binarios, disea e implementa un mtodo Java que decida si uno es la imagen especular del otro. (8) Disear y escribir en Java un mtodo tal que dado un rbol binario de elementos de tipo entero y un entero, devuelva el nmero mximo de repeticiones del entero que nos dan como entrada en una misma rama.

(9) Disear y escribir en Java un mtodo tal que dado un rbol binario de elementos de tipo entero y un entero, devuelva la longitud de la rama que contiene ms veces al entero que nos dan como entrada. (10) Dado un rbol binario de nmeros enteros, disea e implementa un mtodo Java que devuelva la longitud de la rama que contiene mayor peso. Se entiende como peso de una rama la suma de los enteros contenidos en sus nodos. (11) Dado un rbol binario de nmeros enteros, disea e implementa un mtodo Java que devuelva el peso que contiene la rama de mayor peso. (12) Dado un rbol binario de nmeros enteros, disea e implementa un mtodo Java que devuelva una lista que contenga los valores de la rama de mayor peso. (15) Dado un rbol binario con elementos de tipo entero, disea e implementa un mtodo Java que decida si dicho rbol es ABB (rbol binario de bsqueda). (21) Dado un rbol binario, disea e implementa un mtodo que calcule la profundidad del rbol.