martes, 21 de abril de 2009

Altura y Tipo de arbol (java)

El problema es el siguente:

Realizar una función recursiva que reciba como parámetro de entrada un BinaryTree y que devuelva la altura del árbol y un String que podrá tomar cuatro valores: “V” (Vacío), “CO” (Completo), “CA” (Casi Completo) u “O” (Otros), en función del tipo del árbol.
Notas:
El árbol sólo se puede recorrer una vez.
Se definirá la altura de un árbol vacío como - 1, y la de un árbol con un elemento como 0.
Se supone implementada una función max(intege, integer) que devuelve el máximo entre los enteros que se le pasan como parámetros de entrada.


Una posible solucion en java es la siguente:


public doble alturaYTipodeArbol2(Nodo b){
doble izq=new doble(),der=new doble(),res=new doble();

if(b.isEmpty()){
res.a=-1;
res.tipo="V";
} else if(b.isLeaf()){
res.a=0;
res.tipo="CO";
}else{
if(b.left()!=null){
izq=alturaYTipodeArbol(b.left());}
if(b.right()!=null){
der=alturaYTipodeArbol(b.right());}
res.a=max(izq.a,der.a)+1;
if(b.left()==null){
res.tipo="O";}
else if(b.right()==null){
if(izq.a==0){
res.tipo="CA";}
else{
res.tipo="O";}}
else if(izq.a==der.a && izq.tipo.equals("CO") && der.tipo.equals("CO")){
res.tipo="CO";}
else if((izq.tipo.equals("CO") && der.tipo.equals("CA") && izq.a==der.a)|| ((izq.tipo.equals("CO") || izq.tipo.equals("CA"))&& der.tipo.equals("CO") && izq.a==der.a+1)){
res.tipo="CA";{
else {
res.tipo="O";}
}
return res;
}
public int max(int a, int b){
int aux;
if(a < b){
aux=b;}
else{
aux=a;}
return aux;
}

No hay comentarios: