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.

description

IHC

Transcript of Problemas Trab Final

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