problemas trab final

3
4.25 Reconstruir un árbol binario con los siguientes recorridos Preorden: 10 20 30 50 60 40 70 80 90 Inorden: 50 30 60 20 80 70 90 40 10 Tomando como raíz el primer elemento del recorrido preorden y buscando a las ramas izquierda y derecha en el recorrido inorden como vemos en el cuadro es la rama izquierda Preorden: 10 20 30 50 60 40 70 80 90 Inorden: 50 30 60 20 80 70 90 40 10 Después vemos el hijo izquierdo y analizamos sus hijos respectivos. Preorden: 10 20 30 50 60 40 70 80 90 Inorden: 50 30 60 20 80 70 90 40 10 Los hijos vendrían a ser en este caso 30 y 40 y cada uno con sus hijos de acuerdo al inorden lo mismo asemos con los números 80 70 90 como se ve en la figura.

Upload: juandeyby-carlos-chullo

Post on 15-Sep-2015

213 views

Category:

Documents


0 download

DESCRIPTION

IHC

TRANSCRIPT

4.25 Reconstruir un rbol binario con los siguientes recorridos Preorden: 10 20 30 50 60 40 70 80 90Inorden: 50 30 60 20 80 70 90 40 10Tomando como raz el primer elemento del recorrido preorden y buscando a las ramas izquierda y derecha en el recorrido inorden como vemos en el cuadro es la rama izquierdaPreorden: 10 20 30 50 60 40 70 80 90Inorden: 50 30 60 20 80 70 90 40 10Despus vemos el hijo izquierdo y analizamos sus hijos respectivos.

Preorden: 10 20 30 50 60 40 70 80 90Inorden: 50 30 60 20 80 70 90 40 10Los hijos vendran a ser en este caso 30 y 40 y cada uno con sus hijos de acuerdo al inorden lo mismo asemos con los nmeros 80 70 90 como se ve en la figura.

/**Ejercicio 4.6: pgina 164 * Retorna true si los dos arboles son isomorfos, caso contrario retorna false * @param ar1 - arbol a analizar * @param ar2 - arbol a analizar * @return */public static boolean isomorfosArbin(Arbin ar1, Arbin ar2){if (vacioArbin(ar1) && vacioArbin(ar2)) //llegan al un ultimo nivel(una hoja) y ya no hay nada mas que analizarreturn true;

else if(vacioArbin(ar1) && !vacioArbin(ar2) || !vacioArbin(ar1) && vacioArbin(ar2))// si unode ellos tiene mas niveles que el otroreturn false;

elsereturn !vacioArbin(ar1) && !vacioArbin(ar2) &&//las raices tienen que ser iguales y...isomorfosArbin(ar1.izq, ar2.izq) && //los hijos izq's tienen que ser iguales y...isomorfosArbin(ar1.der, ar2.der); //los hijos der's tienes que ser iguales}

/** * Retorna true si el primer arbol, esta incluido en el segundo, si hubiera elementos repetidos * la cantidad de repeticiones del elemento debe ser igual en cada arbol, caso contrario retorna false * @param ar1 - arbol supuesto incluido en ar2 * @param ar2 - arbol supuesto contenedor de ar1 * @return */public static boolean incluidoConRepeticionArbin(Arbin ar1, Arbin ar2){if(vacioArbin(ar1))return true;

elsereturn estaArbin(ar2, raizArbin(ar1)) &&ocurre(ar2, raizArbin(ar1)) == ocurre(ar1, raizArbin(ar1))&&//en ambos arboles existen la misma cantidad de ocurrencias de un elementoincluidoArbin(izqArbin(ar1), ar2) &&incluidoArbin(derArbin(ar1), ar2);}}

public class ArbolBinarioOrdenado {private NodoArbolNario raiz=null;public class NodoArbolNario{private T elem;private Lista hijos;}

//--Cantidad de nodos hoja del arbol N 5.31 pagina 256 asteriscopublic int contarHojas(){return (raiz!=null) ? raiz.contarHojas() : 0;}public int contarHojas(){if(esHoja())return 1;else{int numHojas=0;for(int i=0;i