ARBOLES PRACTIK

8
UNIVERSIDAD MAYOR DE SAN ANDRES CARRERA: INFORMATICA MATERIA: LAB-131 NOMBRE: PAMELA EVELIN MAMANI ULO CI: 7054649 LP DOCENTE: LIC VICTOR POZO FECHA: 18/06/2015 MAMANI ULO PAMELA EVELIN LAB-131 1

description

ciencia

Transcript of ARBOLES PRACTIK

UNIVERSIDAD MAYOR DE SAN ANDRESCARRERA: INFORMATICAMATERIA: LAB-131

NOMBRE: PAMELA EVELIN MAMANI ULOCI: 7054649 LPDOCENTE: LIC VICTOR POZOFECHA: 18/06/2015

PRCTICA ARBOLES:

EJEMPLO 1:El recorrido en preorden de un determinado rbol binario es: GEAIBMCLDFKJH y en inorden IABEGLDCFMKHJ . A) Dibujar el rbol binario. B) Dar el recorrido en postorden. C) Disear una funcin para dar el recorrido en postorden dado el recorrido en preorden e inorden y escribir un programa para comprobar el resultado del apartado anterior.Solucin:Las soluciones son las siguientes:A) El rbol correspondiente es el de la siguiente figura:

B) El recorrido en postorden es IBAEDLFCHJKMG.C) El cdigo solucin al tercer apartado es el siguiente:

/*Fichero: comprobar.c */

#include < stdio.h>#include < stdlib.h>#include < string.h>

char *preorden="GEAIBMCLDFKJH";char *inorden="IABEGLDCFMKHJ";char *postorden;

/*---------------------------------------*/

void post(char *pre,char *in,char *pos,int n){ int longIzqda;

if(n!=0){ pos[n-1]=pre[0]; longIzqda=strchr(in,pre[0])-in; post (pre+1,in,pos,longIzqda); post (pre+1+longIzqda,in+1+longIzqda,pos+longIzqda,n-1-longIzqda); }}

/*----------------------------------------*/

int main(int argc,char *argv[]){ int aux;

aux=strlen(preorden); postorden=(char *)malloc(aux*sizeof(char)); if (postorden){ printf("El preorden es: %s\n",preorden); printf("El inorden es: %s\n",inorden); post(preorden,inorden,postorden,aux); postorden[aux]='\0'; printf("El postorden calculado es: %s\n",postorden); free(postorden); } else{ fprintf(stderr,"Error: Sin memoria\n"); return 1; }

return 0;}

Implementar una funcin no recursiva para recorrer un rbol binario en inorden.El cdigo es el siguiente:/*Fichero: comprobar.c */

#include < pilas.h>#include < arbolesB.h>

/*---------------------------------------*/

void inordenNR(ArbolB T,void (* EscribirElemento)(void *),int tamano){ NodoB nodoActual,aux; void *et; Pila p; int fin; int faltaHD; /*Indica si falta el hijo derecho*/

p=CrearPila(sizeof(NodoB)); et=malloc(tamano); if(!et){ .... /*Error:Sin memoria*/ }

aux=NODOB_NULO; Push(&aux,p); nodoActual=RaizB(T); fin=0; while(!fin){ while(nodoActual!=NODOB_NULO){ Push(&nodoActual,p); nodoActual=HijoIzqdaB(nodoActual,T); } Tope(&nodoActual,p); Pop(p); if (nodoActual!=NODOB_NULO){ EtiquetaArbolB(et,nodoActual,T); (*EscribirElemento)(et); nodoActual=HijoDrchaB(nodoActual,T); } else fin=1; }

free(et); DestruirPila(p);}

MAMANI ULO PAMELA EVELIN LAB-131

7

Arboles binarios de bsqueda:public class abb { private class nodoArbol { private abb hd; private abb hi; private int dato; private void nodoArbol(){ hd = null; hi = null; dato = 0; } } public nodoArbol raiz; public void abb(){ nodoArbol raiz = new nodoArbol(); } public boolean esVacio(){ return (raiz == null); } public void insertar(int a){ if (esVacio()) { nodoArbol nuevo = new nodoArbol(); nuevo.dato = a; nuevo.hd = new abb(); nuevo.hi = new abb(); raiz = nuevo; } else { if (a > raiz.dato) { (raiz.hd).insertar(a); } if (a < raiz.dato){ (raiz.hi).insertar(a); } } } public void preOrder(){ if (!esVacio()) { System.out.print( raiz.dato + ", " ); raiz.hi.preOrder(); raiz.hd.preOrder(); } } public void inOrder(){ if (!esVacio()) { raiz.hi.inOrder(); System.out.print( raiz.dato + ", " ); raiz.hd.inOrder(); } } public void posOrder(){ if (!esVacio()) { raiz.hd.posOrder(); raiz.hi.posOrder(); System.out.print( raiz.dato + ", " ); } } public abb buscar(int a){ abb arbolito = null; if (!esVacio()) { if (a == raiz.dato) { return this; } else { if (a < raiz.dato) { arbolito = raiz.hi.buscar(a); } else { arbolito = raiz.hd.buscar(a); } } } return arbolito; } public boolean existe(int a){ if (!esVacio()) { if (a == raiz.dato) { return true; } else { if (a < raiz.dato) { raiz.hi.existe(a); } else { raiz.hd.existe(a); } } } return false; } public int cantidad(){ if (esVacio()) { return 0; } else { return (1 + raiz.hd.cantidad() + raiz.hi.cantidad()); } } public int altura() { if (esVacio()) { return 0; } else { return (1 + Math.max(((raiz.hi).altura()), ((raiz.hd).altura()))); } } public int buscarMin() { abb arbolActual = this; while( !arbolActual.raiz.hi.esVacio() ) { arbolActual = arbolActual.raiz.hi; } int devuelvo= arbolActual.raiz.dato; arbolActual.raiz=null; return devuelvo; } public int buscarMan() { abb arbolActual = this; while( !arbolActual.raiz.hd.esVacio() ) { arbolActual = arbolActual.raiz.hd; } int devuelvo= arbolActual.raiz.dato; arbolActual.raiz=null; return devuelvo; } public boolean esHoja() { boolean hoja = false; if( (raiz.hi).esVacio() && (raiz.hd).esVacio() ) { hoja = true; } return hoja; } public void eliminar(int a) { abb paraEliminar = buscar(a); if (!paraEliminar.esVacio()) { if (paraEliminar.esHoja()) { paraEliminar.raiz = null; } else { if (!paraEliminar.raiz.hi.esVacio() && !paraEliminar.raiz.hd.esVacio()) { paraEliminar.raiz.dato = paraEliminar.raiz.hd.buscarMin(); } else { if (paraEliminar.raiz.hi.esVacio()) { paraEliminar.raiz = paraEliminar.raiz.hd.raiz; }else{ paraEliminar.raiz = paraEliminar.raiz.hi.raiz; } } } } }}