Está en la página 1de 6

1.

Borrar elementos reemplazando por el menor de rbol


derecho, en la implementacin del TAD Diccionario con ABBs.
//Propuesto: borrar reemplazando por menor de rbol derecho
protected Nodo borrarD(Nodo r){
if(r.izq==null)
return r.der; //Caso 1:solo arbol der.
if(r.der==null)
return r.izq; //Caso 2:solo arbol izq.
//Caso 3: reemplazar por el menor de rbol derecho
if( r.der.izq == null ){
r.id=r.der.id;
r.info=r.der.info;
r.der=r.der.der;
}else{
Nodo q = r.der;
while(q.izq.izq != null)
q=q.izq;
r.id=q.izq.id;
r.info=q.izq.info;
q.izq=q.izq.der;
}
return r;
}
2. En relacin a los Arboles binarios, reescribir sus mtodos:
hojas(raiz), altura(raiz)
buscar(x,raiz), Inorden(raiz), Preorden(raiz) y PostOrden(raiz)
a) sin recursin
3. En un rbol Heap invertido, donde el menor est en la raiz y
cada nodo tiene valores mayores como sus hijos izquierdo y
derecho. Implementar los mtodos extraerMenor(raiz) y
agregar(x,raiz)

4.Para los siguientes problemas considere las declaraciones:
class Nodo{
public Comparable valor;
public Nodo izq, der;
public Nodo(Comparable x, Nodo y, Nodo z){ valor=x; izq=y; der=z; }
}
Nodo raiz = null;

Ejemplo: raiz=new Nodo(C,
new Nodo(B,null,null),
new Nodo(D,null, new Nodo(F,null,null))
);

a) Escriba un mtodo recursivo que determine si un rbol es o no un rbol
binario de bsqueda.
Encabezamiento: boolean esABB(Nodo x)
Ejemplo: esABB(raiz) = true

package Ejercicio4;
public class ArbolBinarioBusqueda{
public static void main(String []args){
Nodo arbol1= null;
Nodo arbol2 = new Nodo( "C",new Nodo("B",null,null),
new Nodo("D",null, new Nodo("F",null,null)) );
Nodo arbol3= new Nodo("C",new Nodo("B",null,null),
new Nodo("F",new
Nodo("E",null,null),neNodo("F",null,null)));

System.out.println("Pruebar si es un ABB");
System.out.println(esABB(arbol1));
System.out.println(esABB(arbol2));
System.out.println(esABB(arbol3));
System.out.println("Deternimar su sucesor");
System.out.println(sucesor(arbol1) );
System.out.println(sucesor(arbol2));
System.out.println(sucesor(arbol3));
}
public static boolean esABB(Nodo x){
if(x==null){
return true;
}
return ( x.izq==null ? true : (x.valor.compareTo(x.izq.valor)<=0
?false : esABB(x.izq) ) )&&( x.der==null ? true : (
x.valor.compareTo(x.der.valor)>=0 ? false : esABB(x.der) ) );
}
}
b) Escriba un mtodo (no recursivo) que entregue el valor del sucesor de
un nodo, es decir, el menor descendiente del subrbol derecho.
Encabezamiento: String sucesor(Nodo x)
Ejemplo: sucesor(raiz) = D

public static String sucesor(Nodo x){
if(x==null){
return null;
}
if(x.der==null){
return null;
}
String sucesor = (String)x.der.valor;
Nodo r = x.der;
while(r.izq!=null){
sucesor = (String)r.izq.valor;
r=r.izq;
}
return sucesor;
}



5.El TDA T tiene definidas las siguientes operaciones:
Operacin Significado
T t=new T() Crea un objeto de clase T sin informacin
t.extraerMenor() Entrega (y elimina) el menor valor del
objeto
t.agregar(x) Agregar el valor x al objeto

a) use el TDA en un mtodo que ordene un arreglo: void
ordenar(Comparable[]x)


package Ejercicio5;
import java.util.Random;
public class PruebaTadT {
private static int M=10;
private static int[] Comparable=new int[M];
public static void Ordena( int[] a ){
TADT t = new TADT();
for(int i=0; i<a.length; i++){
t.agregar(a[i]);
}
for(int j=0; j<a.length; j++)
a[j]=t.extraerMenor();
}
public static void main(String[] args){
int h;
Random rd=new Random();
for( int i=0;i<M; i++){
h=rd.nextInt(100);
Comparable[i]=h;
}
Ordena(Comparable);
for( int i=0;i<M; i++){
System.out.println(Comparable[i]);
}
}
}



b) implemente el TDA con un heap (AB que contiene el menor
valor en su raz)

package Ejercicio5;
public class TadHeap {
private int MAX=10000;
private int[] heap;
private int n;
public TadHeap(){
heap=new int[MAX];
n=0;
}
public void agregar(int x){
heap[n]=x;
int m=(int)Math.floor(n/2);
int j=n;
while( heap[j]<heap[m] ){
int t=heap[j];
heap[j]=heap[m];
heap[m]=t;
j=m;
m=(int)Math.floor(j/2);
if(j==m){
break;
}
}
n++;
}
public int extraerMenor(){
int m=heap[0];
heap[0]=heap[--n];
int j=0;
int k,t;
while(2*j+1<n){
k=2*j+1;
if(k+1<=n && heap[k+1]<heap[k]){
k=k+1;
}
if(heap[j]<heap[k]){
break;
}
t=heap[j];
heap[j]=heap[k];
heap[k]=t;
j=k;
}
return m;
}
}

c) implemente el TDA con un arreglo

package Ejercicio5;
public class TADT{
private int Max=1000;
private int[] t;
private int max;
public TADT(){
t=new int[Max];
max=0;
}
public int extraerMenor(){
int temp=t[0];
int pos=0;
for(int j=0;j<max;j++ ){
if( temp>t[j]){
temp=t[j];
pos=j;
}
}
t[pos]=t[--max];
return temp;
}
public void agregar(int x){
if(max==Max){
return;
}
t[max++]=x;
return;
}
}

También podría gustarte