SlideShare ist ein Scribd-Unternehmen logo
1 von 24
ARBOLES MULTICAMINOS ESTRUCTURAS DE DATOS
INTRODUCCION ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CARACTERISTICAS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
EJEMPLO ,[object Object],[object Object],[object Object],[object Object],[object Object],P I  L S  X A C D J  K  M  O Q  R T  U Y  Z > P < P < I < L > L < S < X > X Arbol B de  orden 5(4-5) Max:  5 ramas(4 claves) Min: 3 ramas(2 claves)
ESTRUCTURA DE LA PAGINA ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],typedef struct{ Generico Claves[2]; Generico Contenido[2]; int nclaves; struct Pagina *izq, *centro, *der; }Pagina; F M
ESTRUCTURA FINAL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],#define MAX 3 typedef struct{ Generico Claves[MAX-1]; struct Pagina *Ramas[MAX]; int nramas; }Pagina; typedef Pagina * ArbolB; Ramas[0], valores menores que Claves[0] Ramas[1], valores menores que Claves[1] Ramas[2], valores menores que Claves[2] Ramas[3], valores  mayores  que Claves[2] F M S 0 1 2 0 1 2 3
OPERACIONES ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
VACIAR Y ESTA VACIO ,[object Object],void AB_Inicializar(ArbolB *raiz){ *raiz = NULL; } bool AB_EstaVacio(ArbolB raiz){ return(raiz == NULL); }
BUSQUEDA ,[object Object],45 79 172 192 233 Buscar 192 Es menor que 45 ? 79 ? 172 ? 18 26 5 9 15 22 24 29 32 48 57 82 126
BUSQUEDA: IMPLEMENTACION Pagina *Buscar(ArbolB A, Generico clave, Generico_fnComparar fn, int *pos){ int i; if(EstaVacio(A)) return NULL; for(i = 0; i < A->nclaves;i++){ if(fn(A->Claves[i], clave)==0){ *pos = i; return(A); } if(fn(clave, A->Claves[i]) < 0) return(Buscar(A->Ramas[i],clave,fn, pos); } return(Buscar(A->Ramas[i],clave,fn,pos); }
RECORRIDOS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
EJEMPLO PREORDEN 45 18 26 79 172 5 9 15 22 24 29 32 48 57 82 126 192 233
PREORDEN: IMPLEMENTACION void ArbolB_PreOrden(ArbolB A, Generico_fnImprimir fn){ int i; if(ArbolB_EstaVacio(A)) return(); for(i = 0; i < A->nclaves;i++){ fn(A->Claves[i]); PreOrden(A->Ramas[i], fn); } PreOrden(A->Ramas[i],fn); }
ALGORITMO DE INSERCION ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
EJEMPLO ,[object Object],[object Object],Clave a Subir:  8 Pagina a Subir: NULL 8 no entra, hay que dividir, creando nueva pagina Clave a Subir:  6 6 Clave a Subir:  21 6 ya no tiene donde subir, se crea nueva raiz y se enlaza paigna a  subir 21 no entra, hay que dividir, creando nueva pagina Subimos clave mediana hasta que entre en alguna pagina Clave a Subir:  11  Clave a Subir:  28  Clave a Subir:  19 Clave a Subir:  16 Clave a Subir:  15 Clave a Subir:  27 Clave a Subir:  27 No entra en la pagina raiz, pues ya esta llena, dividir Clave a Subir:  15 Ya llegamos a la raiz, no hay donde subir, crear nueva raiz y enlazar 15 4 5 6 11 4 5 8 11 8 11 8 9 11 12 8 9 12 21 6 11 12 21 12 14 21 8 9 10 12 14 19 21 12 14 21 28 21 28 6 11 19 4 5 3 12 14 15 17 21 28 32 16 17 12 14 16 17 6 11 15 19 21 26 28 32 21 26 28 32 6 11 19 27 28 32 19 27
CONCLUSION ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
IMPLEMENTACION void ArbolB_Insertar(ArbolB *A, Generico clave, Generico_fnComparar fn){ ArbolB NuevaRaiz; Pagina *PaginaSubir; Generico ClaveSubir; bool Propagar; Propagar = BuscarDividirOMeter(A,clave,&PaginaSubir, &ClaveSubir); if(Propagar){ NuevaRaiz = NuevaPagina(ClaveSubir); NuevaRaiz->Ramas[0] = *A; NuevaRaiz->Ramas[1] = PaginaSubir; *A = NuevaRaiz; } }
IMPLEMENTACION bool BuscarMeterODividir(ArbolB *A, Generico clave, ArbolB *PaginaSubir,  Generico *ClaveSuribr, Generico_fnComparar fn){ Pagina *PagEncontrada; if(ArbolB_EstaVacio(*A)){  //Rebota la clave y la pagina a subir(NULL)   *PaginaSubir = NULL; *ClaveSubir = clave; return(TRUE); } PagEncontrada = BuscarClaveEnPag(A, clave, &pos, fn); if(PagEncontrada) return FALSE;  //No se permiten claves repetidas //Como no la encontre, bajar por el arbol por la rama adecuada Propagar = BuscarDividiryMeter(A->Ramas[pos],clave,PaginaSubir,ClaveSubir, fn); if(Propagar){  //Si hay que propagar, hay que intentar meter la clave en esta pagina if(A->nclaves < A->orden-1){ MeterClaveEnPagina(A, ClaveASubir, PaginaSubir,pos); return(FALSE); else{ Dividir(A, ClaveSubir, PaginaSuibr, pos); return(TRUE); } } }
ALGORITMO DE ELIMINACION ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ELIMINACION DE CLAVE EN HOJA ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
EJEMPLO ,[object Object],45 16 26 5 9 15 18 22 24 Reemplazar por Sucesor 18 Aun hay suf. Claves para eliminar Menos claves de las permitidas, eliminar e informar al padre La raiz decide que puede prestar de los hermanos 15 18 ,[object Object],[object Object],[object Object],[object Object],[object Object],18 15 ,[object Object],[object Object],[object Object],[object Object],45 79 172 48 57 82 126 192 232 29 32 79 172
CONCLUSION ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
IMPLEMENTACION void ArbolB_Eliminar(ArbolB *A, Generico clave, Generico_fnComparar fn){ ArbolB tmp; bool Propagar; Propagar = BuscarEliminaroFusionar(A,I); if(Propagar){ tmp = A; *A = *A->Ramas[0]; free(tmp); } }
IMPLEMENTACION bool BuscarEliminaroFusionar(ArbolB *A, Generico clave, Generico_fnComparar fn) ArbolB PagEncontrada; ArbolB *sucesor; if(ArbolB_EstaVacio(*A)){  //La clave no existe return(FALSE); } PagEncontrada = BuscarClaveEnPag(*A, I, &pos, ,fn); if(PagEncontrada){  //Si esta en la pagina, eliminar if(ArbolB_EsHoja(*A)){ Remover(*A,pos); return(A->Ramas[pos].nclaves < min); } else{ sucesor = InterCambiarConSucesor(A,pos); Propagar = BuscarEliminaroFusionar(sucesor, clave, fn); } } else  //Si no esta en la pagina, seguir bajando en el arbol por la rama correcta Propagar = BuscarEliminaroFusionar(A->Ramas[pos], I); if(Propagar)  //Si hay que propagar, arreglar la pagina para prestar clave y fusionar if(!EsHoja(A)) && A->Ramas[pos].nclaves < min) return(Arreglar(A, pos )); } }

Weitere ähnliche Inhalte

Mehr von Gustavo Salazar Loor (20)

Max Plus Compilar vhdl
Max Plus Compilar vhdlMax Plus Compilar vhdl
Max Plus Compilar vhdl
 
ECUADOR
ECUADORECUADOR
ECUADOR
 
Electronica I Clase07
Electronica I Clase07Electronica I Clase07
Electronica I Clase07
 
Electronica I Clase07
Electronica I Clase07Electronica I Clase07
Electronica I Clase07
 
Electronica I Clase06
Electronica I Clase06Electronica I Clase06
Electronica I Clase06
 
Electronica I Clase05
Electronica I Clase05Electronica I Clase05
Electronica I Clase05
 
Electronica I Clase04
Electronica I Clase04Electronica I Clase04
Electronica I Clase04
 
Electronica I Clase03
Electronica I Clase03Electronica I Clase03
Electronica I Clase03
 
Electronica I Clase02
Electronica I Clase02Electronica I Clase02
Electronica I Clase02
 
Electronica I Clase01
Electronica I Clase01Electronica I Clase01
Electronica I Clase01
 
TDA
TDATDA
TDA
 
LISTAS ESPECIALES
LISTAS ESPECIALESLISTAS ESPECIALES
LISTAS ESPECIALES
 
LISTAS
LISTASLISTAS
LISTAS
 
GRAFOS
GRAFOSGRAFOS
GRAFOS
 
HEAPS
HEAPSHEAPS
HEAPS
 
ARBOLES
ARBOLESARBOLES
ARBOLES
 
COLAS
COLASCOLAS
COLAS
 
PILAS
PILASPILAS
PILAS
 
CODIGO DE HUFFMAN
CODIGO DE HUFFMANCODIGO DE HUFFMAN
CODIGO DE HUFFMAN
 
RESPIRACION Y FERMENTACION
RESPIRACION Y FERMENTACIONRESPIRACION Y FERMENTACION
RESPIRACION Y FERMENTACION
 

Kürzlich hochgeladen

La Evaluacion Formativa SM6 Ccesa007.pdf
La Evaluacion Formativa SM6  Ccesa007.pdfLa Evaluacion Formativa SM6  Ccesa007.pdf
La Evaluacion Formativa SM6 Ccesa007.pdfDemetrio Ccesa Rayme
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfMercedes Gonzalez
 
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...Ars Erótica
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIAFabiolaGarcia751855
 
Actividades para el 11 de Mayo día del himno.docx
Actividades para el 11 de Mayo día del himno.docxActividades para el 11 de Mayo día del himno.docx
Actividades para el 11 de Mayo día del himno.docxpaogar2178
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxFernando Solis
 
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdfPROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdfEduardoJosVargasCama1
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfapunteshistoriamarmo
 
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptxPLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptxCamuchaCrdovaAlonso
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxiemerc2024
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOluismii249
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Katherine Concepcion Gonzalez
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesMarisolMartinez707897
 

Kürzlich hochgeladen (20)

La Evaluacion Formativa SM6 Ccesa007.pdf
La Evaluacion Formativa SM6  Ccesa007.pdfLa Evaluacion Formativa SM6  Ccesa007.pdf
La Evaluacion Formativa SM6 Ccesa007.pdf
 
Sesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdfSesión de clase APC: Los dos testigos.pdf
Sesión de clase APC: Los dos testigos.pdf
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...Louis Jean François Lagrenée.  Erotismo y sensualidad. El erotismo en la Hist...
Louis Jean François Lagrenée. Erotismo y sensualidad. El erotismo en la Hist...
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
Actividades para el 11 de Mayo día del himno.docx
Actividades para el 11 de Mayo día del himno.docxActividades para el 11 de Mayo día del himno.docx
Actividades para el 11 de Mayo día del himno.docx
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdfPROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptxPLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
 
Los dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la VerdadLos dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la Verdad
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
Novena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan EudesNovena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan Eudes
 

ARBOLES MULTICAMINOS

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10. BUSQUEDA: IMPLEMENTACION Pagina *Buscar(ArbolB A, Generico clave, Generico_fnComparar fn, int *pos){ int i; if(EstaVacio(A)) return NULL; for(i = 0; i < A->nclaves;i++){ if(fn(A->Claves[i], clave)==0){ *pos = i; return(A); } if(fn(clave, A->Claves[i]) < 0) return(Buscar(A->Ramas[i],clave,fn, pos); } return(Buscar(A->Ramas[i],clave,fn,pos); }
  • 11.
  • 12. EJEMPLO PREORDEN 45 18 26 79 172 5 9 15 22 24 29 32 48 57 82 126 192 233
  • 13. PREORDEN: IMPLEMENTACION void ArbolB_PreOrden(ArbolB A, Generico_fnImprimir fn){ int i; if(ArbolB_EstaVacio(A)) return(); for(i = 0; i < A->nclaves;i++){ fn(A->Claves[i]); PreOrden(A->Ramas[i], fn); } PreOrden(A->Ramas[i],fn); }
  • 14.
  • 15.
  • 16.
  • 17. IMPLEMENTACION void ArbolB_Insertar(ArbolB *A, Generico clave, Generico_fnComparar fn){ ArbolB NuevaRaiz; Pagina *PaginaSubir; Generico ClaveSubir; bool Propagar; Propagar = BuscarDividirOMeter(A,clave,&PaginaSubir, &ClaveSubir); if(Propagar){ NuevaRaiz = NuevaPagina(ClaveSubir); NuevaRaiz->Ramas[0] = *A; NuevaRaiz->Ramas[1] = PaginaSubir; *A = NuevaRaiz; } }
  • 18. IMPLEMENTACION bool BuscarMeterODividir(ArbolB *A, Generico clave, ArbolB *PaginaSubir, Generico *ClaveSuribr, Generico_fnComparar fn){ Pagina *PagEncontrada; if(ArbolB_EstaVacio(*A)){ //Rebota la clave y la pagina a subir(NULL) *PaginaSubir = NULL; *ClaveSubir = clave; return(TRUE); } PagEncontrada = BuscarClaveEnPag(A, clave, &pos, fn); if(PagEncontrada) return FALSE; //No se permiten claves repetidas //Como no la encontre, bajar por el arbol por la rama adecuada Propagar = BuscarDividiryMeter(A->Ramas[pos],clave,PaginaSubir,ClaveSubir, fn); if(Propagar){ //Si hay que propagar, hay que intentar meter la clave en esta pagina if(A->nclaves < A->orden-1){ MeterClaveEnPagina(A, ClaveASubir, PaginaSubir,pos); return(FALSE); else{ Dividir(A, ClaveSubir, PaginaSuibr, pos); return(TRUE); } } }
  • 19.
  • 20.
  • 21.
  • 22.
  • 23. IMPLEMENTACION void ArbolB_Eliminar(ArbolB *A, Generico clave, Generico_fnComparar fn){ ArbolB tmp; bool Propagar; Propagar = BuscarEliminaroFusionar(A,I); if(Propagar){ tmp = A; *A = *A->Ramas[0]; free(tmp); } }
  • 24. IMPLEMENTACION bool BuscarEliminaroFusionar(ArbolB *A, Generico clave, Generico_fnComparar fn) ArbolB PagEncontrada; ArbolB *sucesor; if(ArbolB_EstaVacio(*A)){ //La clave no existe return(FALSE); } PagEncontrada = BuscarClaveEnPag(*A, I, &pos, ,fn); if(PagEncontrada){ //Si esta en la pagina, eliminar if(ArbolB_EsHoja(*A)){ Remover(*A,pos); return(A->Ramas[pos].nclaves < min); } else{ sucesor = InterCambiarConSucesor(A,pos); Propagar = BuscarEliminaroFusionar(sucesor, clave, fn); } } else //Si no esta en la pagina, seguir bajando en el arbol por la rama correcta Propagar = BuscarEliminaroFusionar(A->Ramas[pos], I); if(Propagar) //Si hay que propagar, arreglar la pagina para prestar clave y fusionar if(!EsHoja(A)) && A->Ramas[pos].nclaves < min) return(Arreglar(A, pos )); } }