04EjerciciosArboles

12
 Para la resolución de los ejercicios, se dispone de una implementación de árbol binario a través de la clase BinTree con la siguiente especificación.  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 información de la raiz  public Object getRootInfo()  }   A su vez los métodos 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 t heI nf o  public BTNode(Object theInfo) // devuelve la información del Nodo  public Object content  A su vez s e dispone de la clase Iteradora sobre un arbol Binario BinTreeItr con la siguiente especificación  public class BinTreeItr {  public BinTree bTree; ......... } Los metodos que se pidan en todos los ejercicios se implementarán dentro de esta clase iteradora

Transcript of 04EjerciciosArboles

Page 1: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 1/12

Para la resolución de los ejercicios, se dispone de unaimplementación de árbol binario a través de la clase BinTree conla siguiente especificación.

 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 información de la raiz

 public Object getRootInfo()}

   A su vez los métodos disponibles en la claseBTNode 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 información del Nodo public Object content

 A su vez se dispone de la clase Iteradora

sobre un arbol Binario BinTreeItr con lasiguiente especificación

 public class BinTreeItr {

 public BinTree bTree;

.........}

Los metodos que se pidan en todos los ejercicios seimplementarán dentro de esta clase iteradora

Page 2: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 2/12

(J94) Diseñar y escribir en Java la función mismaEstructura, tal que dados dosárboles binarios diga si estos tienen o no la misma estructura (misma estructura significaque los árboles son iguales, excepto los valores de los nodos).

En el ejemplo de la figura mismaEstructura(arbol_1, arbol_2) devolvería true mientrasque mismaEstructura(arbol_1, arbol_3) devolvería false.

A

DB

C E F

Z

OF

L A F

T

SW

M

A

U

arbol_1 arbol_2 arbol_3

(S94)  Diseñar y escribir en Java la función numNodos  tal que dado un árbol binario yun nivel (número positivo) devuelva el número de nodos que se encuentran en el árbolen dicho nivel.

En la figura, por ejemplo:• numNodos(arbol_ejemplo, 1) devolvería 1

• numNodos(arbol_ejemplo, 3) devolvería 4• numNodos(arbol_ejemplo, 5) devolvería 2

A

Z

OF

L A F

T

SW

M

A

U

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

Page 3: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 3/12

(J95) Diseñar y escribir en Java un subprograma tal que dado un árbol binario deenteros(Integer), determine si dicho árbol está equiponderado.

• Un árbol binario está equiponderado si se cumple que para todo nodo el peso del subárbol izquierdo es igual al peso del subárbol derecho.

• El árbol binario vacío está equiponderado por definición.

Llamamos peso de un árbol a la suma de todos sus elementos.

4

2

1 1

0

2 2

13

12

8 4

2 2

34

-3 -3

0

Ejemplo de árbolesequiponderados:

(S95) Diseñar y escribir en Java un subprograma tal que dado un árbol binario y unalista ligada(con su iterador ListaLigadaItr), determine si la lista coincide exactamentecon alguna rama completa del árbol.Una rama del árbol es completa si partiendo de la raíz acaba en alguna de las hojas.

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

a eb h b

Ejemplos de listas que NO coinciden exactamente con ninguna de las

ramas completas del árbol anterior:

b

e

a

a be h b

eb h

a b

a

b

e

h i

b

d

Page 4: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 4/12

(J96)

public class Nodo extends Object {

int dato;

int profundidad;

int claseDeHijo;

}

Diseñar y escribir en Java un subprograma tal que dado un árbol binario de elementosde tipo Nodo, devuelva el mismo árbol pero etiquetado. Esto es, que cada nodo del árbol

contenga en su subcampo profundidad la información correspondiente a laprofundidad del subárbol que comienza en ese nodo, y en el subcampo claseDeHijo

el valor 0 si se trata del nodo raíz del árbol, -1 si es raíz de un subárbol izquierdo y 1 sies raíz de un subárbol derecho.

2

8

1 7

302

10

5

2

8

1 7

302

10

5

2

8

1 7

302

10

5

4

3 2

2 2 1

1 1 1

0

-1 1

-1 1

1 -1 1

1

Page 5: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 5/12

(S96)

Diseñar y escribir en Java un subprograma tal que dado un árbol binario, devuelva unalista que contenga los elementos de la rama más larga del árbol de entrada.

Si hubiera varias ramas con la misma profundidad, la lista contendría los elementos deuna cualquiera de ellas (como ocurre en el ejemplo de la segunda figura).

 

La lista asociada será

3 2 5 2

3

2

3

2

15

5

3

1

55

12

La lista asociada será

4 473 5 41

Page 6: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 6/12

(J97)

 public class BTNode {

 public int info;

 public int equilibrio; private BTNode leftChild;

 private BTNode rightChild;}

Diseñar y escribir en Java un subprograma tal que dado un árbol binario de nodos detipo 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 subárboles son iguales.•  Con la diferencia de profundidad entre los dos subárboles. Este número

será negativo si el subárbol izquierdo tiene mayor profundidad que elderecho y positivo en caso contrario.

2. Por otro lado, el subprograma devolverá un valor booleano True si el árbol esequilibrado y False en caso contrario.

Nota: se dice que un árbol es equilibrado si para cada nodo la profundidad de sussubárboles es la misma o difiere a lo sumo en 1.

Ejemplos:

A

B F

C

Árbol deentrada

Árbol de salidaetiquetado y no

es equilibrado

D

E

A,-2

B,+1 F,0

C,0 D,+1

E,0

A

B D

C E

Árbol deentrada

Árbol de salidaetiquetado y es

equilibrado

A,0

B,-1 D,+1

C,0 E,0

Page 7: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 7/12

(S97) Diseñar y escribir en Java un subprograma que dado un árbol binario deelementos de tipo char y un nivel, devuelva el número 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 3, el resultado debe ser 2

Si el nivel es 2, el resultado debe ser 0

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

Page 8: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 8/12

(J98)

Se dice que un nodo de un árbol binario tiene grado 2 cuando los subárboles izquierdoy derecho son distintos de vacío.

Se dice que un árbol binario es 2-equilibrado cuando bien es el árbol vacío, o bien secumplen al mismo tiempo las siguientes condiciones:

• El subárbol izquierdo es 2-equilibrado.• El subárbol derecho es 2-equilibrado.• El número de nodos de grado 2 en el subárbol izquierdo coincide con el númerode nodos de grado2 en el subárbol derecho.

Diseñar y escribir en Java un subprograma tal que dado un árbol binario devuelva si elárbol es 2-equilibrado.

Page 9: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 9/12

Ejemplos:

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

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

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

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

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

Page 10: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 10/12

(S98)Se dice que un árbol binario arbol1 es prefijo de otro árbol binario arbol2, cuandoarbol1 coincide con la parte inicial del árbol arbol2 tanto en el contenido de loselementos como en su situación. En el siguiente ejemplo arbol1 es prefijo de arbol2:

37

65

8137

47 93

65

81

47 9322

11 29

76

85 94

arbol1 arbol2

Diseñar y escribir en Java un subprograma tal que dados dos árboles binarios, arbol1 yarbol2, decida si arbol1 es prefijo de arbol2.

En los siguientes ejemplos arbol1 no es prefijo de arbol2:

37

65

8137

47 93

65

81

9322

11 29

76

85 94

arbol1 arbol2

37

65

8137

65

81

9322

11 29

76

85 94

arbol1 arbol2

93

Page 11: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 11/12

(1) Diseñar y escribir en Java un método tal que dado un árbol, devuelva el númerode nodos hoja del árbol que cumplan lo siguiente:•  En la rama que une la raíz del árbol con la hoja hay un número de nodos (que nos

viene dado) que tiene exactamente uno de sus subárboles vacío.

(2) Diseñar y escribir en Java un método recursivo, que devuelva la lista de los nodoshoja del árbol que cumplen los requisitos del problema anterior.

(3) Dado un árbol binario de elementos de tipo carácter, un número de nivel y uncaracter, diseña e implementa un método Java que cuente el número de nodos de esenivel que contiene el carácter dado.

(4) Dado un árbol binario de elementos de tipo carácter, y dado un número de nivel,diseña e implementa un método Java que obtenga la lista de caracteres almacenados enese nivel del árbol.

(5) Dado un árbol binario, diseña e implementa un método Java que lo transforme ensu imagen especular.

(6) Dado un árbol binario, diseña e implementa un método Java que cree un nuevoárbol que sea su imagen especular.

(7) Dados dos árboles binarios, diseña e implementa un método Java que decida si unoes la imagen especular del otro.

(8) Diseñar y escribir en Java un método tal que dado un árbol binario de elementos detipo entero y un entero, devuelva el número máximo de repeticiones del entero quenos dan como entrada en una misma rama.

C

2

A

Arbol deentrada

Nº antecesoresdado

Listaobtenida

A

B

C2

A

Arbol deentrada

Nº antecesoresdado

Listaobtenida

A

0

A

Arbol deentrada

Nº antecesoresdado

Listaobtenida

A

B

C

B C

Page 12: 04EjerciciosArboles

5/13/2018 04EjerciciosArboles - slidepdf.com

http://slidepdf.com/reader/full/04ejerciciosarboles 12/12

(9) Diseñar y escribir en Java un método tal que dado un árbol binario de elementos detipo entero y un entero, devuelva la longitud de la rama que contiene más veces alentero que nos dan como entrada.

(10) Dado un árbol binario de números enteros, diseña e implementa un método Javaque devuelva la longitud de la rama que contiene mayor peso. Se entiende como pesode una rama la suma de los enteros contenidos en sus nodos.

(11) Dado un árbol binario de números enteros, diseña e implementa un método Javaque devuelva el peso que contiene la rama de mayor peso.

(12) Dado un árbol binario de números enteros, diseña e implementa un método Javaque devuelva una lista que contenga los valores de la rama de mayor peso.

(15) Dado un árbol binario con elementos de tipo entero, diseña e implementa unmétodo Java que decida si dicho árbol es ABB (árbol binario de búsqueda).

(21) Dado un árbol binario, diseña e implementa un método que calcule la profundidaddel árbol.