Estructuras%20de%20datos%20Heap%20(mont - PowerPoint PPT Presentation

About This Presentation
Title:

Estructuras%20de%20datos%20Heap%20(mont

Description:

Un arbol perfectamente equilibrado hasta el penultimo nivel, y ... regresar a carga(nodo^.izq)//llamada recursiva. sino. hacer nodo^.izq=Nil. 6.- fin del paso 5 ... – PowerPoint PPT presentation

Number of Views:40
Avg rating:3.0/5.0
Slides: 19
Provided by: alu260
Category:

less

Transcript and Presenter's Notes

Title: Estructuras%20de%20datos%20Heap%20(mont


1
Estructuras de datos Heap (montículo)
  • Un árbol completo, es aquel en el que todos los
    niveles, con excepción del último, tiene sus
    nodos completos. Un arbol perfectamente
    equilibrado hasta el penultimo nivel, y en el
    ultimo nivel los nodos se encuentran agrupados a
    la izquierda .
  • Un Heap es un árbol binario completo a izquierda,
    que permite implementar una cola con prioridad, y
    donde los elementos se almacenan cumpliendo la
    propiedad de que la clave de un nodo siempre es
    mayor (o menor) que la clave de cualquiera de sus
    hijos. Lo que nos asegura que la raíz del árbol,
    en un Heap, siempre es el elemento mayor (o
    menor) de la estructura.

2
Ejemplos
  • Arbol binario lleno
  • Arbol binario completo

3
Monticulo o Heap
  • El acceso a los elementos del Heap en un arreglo,
    se hace a través de algunas operaciones
    aritméticas básicas
  • Left(i)    return 2i   .- Obtiene el hijo
    izquierdo del elemento i.
  • Right(i)  return 2i 1 .- Obtiene el hijo
    derecho del elemento i.
  • Parent(i) return floor(i/2) .- Obtiene el padre
    del elemento i.

4
Crear un arbol binario
  • Carga(nodo)
  • 1.- Leer informacion(info)
  • 2.- Hacer nodo.infoinfo
  • 3.- Escribir Existe nodo por la izquierda?
  • 4.- Leer repuesta
  • 5.- Si respuesta es afirmativa
  • entonces
  • crea(otro)
  • hacer nodo.izqotro
  • regresar a carga(nodo.izq)//llamada recursiva
  • sino
  • hacer nodo.izqNil
  • 6.- fin del paso 5
  • 7.- 3.- Escribir Existe nodo por la derecha?
  • 8.- Leer repuesta
  • 9.- Si respuesta es afirmativa
  • entonces
  • crea(otro)
  • hacer nodo.derotro

5
Recorridos de arboles
  • Recorrido en preorden
  • 1.-Visita la raiz
  • 2.- recorre el subarbol izquierdo
  • 3.- recorre el subarbol derecho
  • Recorrido en inorden
  • 1.- recorre el subarbol izquierdo
  • 2.- Visita la raiz
  • 3.- recorre el subarbol derecho
  • Recorrido en postorden
  • 1.- recorre el subarbol izquierdo
  • 2.- recorre el subarbol derecho
  • 3.- Visita la raiz

6
Algoritmo para recorrerlo en Preorden
  • Preorden(nodo)
  • 1.- Si nodo ltgtnil entonces
  • visita el nodo(escribir la info del nodo)
  • Regresa preorden(nodo.izq)
  • Regresa preorden(nodo.der)
  • 2.- fin del paso 1

7
Algoritmo para recorrerlo en Inorden
  • Inorden(nodo)
  • 1.- Si nodo ltgtnil entonces
  • Regresa inorden(nodo.izq)
  • visita el nodo(escribir la info del nodo)
    Regresa inorden(nodo.der)
  • 2.- fin del paso 1

8
Algoritmo para recorrerlo en Postorden
  • Postorden(nodo)
  • 1.- Si nodo ltgtnil entonces
  • Regresa Postorden(nodo.izq)
  • Regresa postorden(nodo.der)
  • visita el nodo(escribir la info del nodo)2.-
    fin del paso 1

9
Ejemplos
  • Carga los nodos 95-96-13-73-14-18-29
  • Recorrido
  • Preorden95-96-13-73-14-18-29
  • Inorden13-96-73-95-18-14-29
  • Postorden 13-73-96-18-29-14-95

10
Arboles binarios de busqueda
  • Para todo nodo T del arbol debe cumplirse que
    todos los valores de los nodos del subarbol
    izquierdo de T seran menores al valor del nodo
    T y todos los valores de los nodos del subarbor
    derecho de T deben ser mayores. Si los valores
    se repiten solo se inserta una vez.

11
Insercion en un arbol binario de busqueda
  • Insercion(nodo,info)
  • 1.- Si nodoltgtNil
  • entonces
  • 1.1 Si infoltnodo.info
  • entonces
  • insercion(nodo.izq,info)
  • sino
  • 1.1.1 Si infogtnodo.info
  • entonces
  • insercion(nodo.der,info)
  • sino
  • Escribir informacion ya existente
  • 1.1.2 fin de 1.1.1
  • 1.2 fin de 1.1
  • sino
  • crea(otro)
  • otro.izqotro.derNil
  • otro.infoinfo,nodootro.
  • 2.- fin de 1

Insertar95,16,104,13,100,129,73
12
Recorridos en un arbol binario de busqueda
  • Preorden 95-16-13-73-104-100-129
  • Postorden13-73-16-100-129-104-95
  • Inorden13-16-73-95-100-104-129

13
Busqueda de un elemento en un arbol binario de
busqueda(recursivo)
  • Busqueda(nodo,info)
  • 1.- Si nodoltgtNil
  • entonces
  • 1.1 Si infoltnodo.info
  • entonces
  • Busqueda(nodo.izq,info)
  • sino
  • 1.1.1 Si infogtnodo.info
  • entonces
  • Busqueda(nodo.der,info)
  • sino
  • Escribir El dato esta en el arbol
  • 1.1.2 fin del paso 1.1.1
  • 1.2 fin del paso 1.1
  • sino
  • Escribir El dato no esta en el arbol

14
Ejemplo
  • En que lugar quedaria insertado el numero 20
  • Inserta 99
  • Inserta 84

95
97
50
73
96
100
12
200
15
Eliminar un nodo
  • Hay que eliminar un nodo si violar los principios
    que definen un arbol binario de busqueda.
  • 1.- Si el nodo es terminal u hoja, simplemente se
    suprime
  • 2.- Si solo tiene un solo descendiente, entonces
    tiene que sustituirse por ese descendiente
  • 3.- Si tiene dos descendientes, entonces se tiene
    que sustituir por el nodo que se encuentra mas a
    la derecha en el subarbol izquierdo o mas a la
    izquierda en el subarbol derecho.
  • Pero antes de eliminarlo se tiene que encontrar.
  • Para eliminar podemos seleccionar el mas grande
    del subarbol izquierdo o el mas pequeño del
    subarbol derecho del nodo a eliminar

16
Algoritmo de eliminacion
  • Elimina(int k,int e) //elimina el elemento k y
    guarda el valor en e
  • nodoarbol proot,ppNULL
  • while(p p-gtdato!k)//este recorrido busca el
    nodo, en pp se guada el padre
  • ppp //del que
    queremos borrar y en p el nodo a borrar
  • if(kltp-gtdato) pp-gtizq
  • else pp-gtder
  • If(!p) coutltltNo se encuntra el dato//si no
    encontro a k
  • else ep-gtdato
  • If(p-gtizq p-gtder) //si tiene dos hijos,
    encuentra el mas grande del subarbol izquierdo
  • nodoarbol sp-gtizq,psp //izquierdo
    de p
  • while(s-gtder)
  • pss
  • ss-gtizq //se mueve al mas grande
  • p-gtdatos-gtdato //copia el dato del mas grande
    a p
  • ps
  • ppps

17
Continuacion.
  • //p tiene por lo menos un hijo, lo guarda en c
  • nodoarbol c //p tiene por lo menos un
    subarbol
  • If(p-gtizq) cp-gtizq
  • else cp-gtder
  • If(proot) rootc
  • else //identificar si p es el hijo izquierdo o
    derecho de pp
  • If(ppp-gtizq) pp-gtizqc
  • else pp-gtderc
  • delete p
  • //fin del else de que lo encontro

18
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com