MiEmpresa Ventas Producción Portátiles Pc’s Ve Internacional Europa Asia América
 
A B C D E F G I H Nodo RAIZ
A B C D E F G H C: es padre de F y G F y G son Hijos de C F y G son hermanos
A B C D E F G H D: Es un nodo interno H: es un nodo hoja
A B C D E F G H Subárbol Izquierdo de B Subárbol derecho de B
A B C D E F G H Nivel 0 Nivel 1 Nivel 2 Nivel 3
A B C D E F G H I J K
A B C D E F G H I J K Nodo Altura Nivel Grado A 3 0 2 B 2 1 2 C 2 1 3 D 1 2 2 E 0 2 0 F 1 2 1 G 0 2 0 H 0 2 0 I 0 3 0 J 0 ...
A B C D E F G H I
A B C D E F G H I A B C D E F G H I J K
A B C D E F G H I A C B E D F G H I
A C B D E F G H I A C B D E F G H I
A B C D E F G H I J 1  2  3  4  5  6  7  8  9  10 A(i) es el nodo padre del nodo i A(4)=B es el nodo padre del nodo D 0 1 ...
Enlace Izquierdo Información Enlace Derecho
+ * ^ A B / 35 C D - A - + ^ * - B - B 35
A B C D E F G H
 
A B C D E F G H RECORRIDO: D,B
A B C D E F G H RECORRIDO: D,B,A
A B C D E F G H RECORRIDO: D,B,A,G
A B C D E F G H RECORRIDO: D,B,A,G,E
A B C D E F G H RECORRIDO: D,B,A,G,E,H
A B C D E F G H RECORRIDO: D,B,A,G,E,H,C
RECORRIDO: D,B,A,G,E,H,C,F. A B C D E F G H
A B C D E F G H
 
A B C D E F G H RECORRIDO: A,B
A B C D E F G H RECORRIDO: A,B,D
A B C D E F G H RECORRIDO: A,B,D,C
A B C D E F G H RECORRIDO: A,B,D,C,E
A B C D E F G H RECORRIDO: A,B,D,C,E,G
A B C D E F G H RECORRIDO: A,B,D,C,E,G,H
RECORRIDO: A,B,D,C,E,G,H,F A B C D E F G H
A B C D E F G H
 
A B C D E F G H RECORRIDO: D,B
A B C D E F G H RECORRIDO: D,B,G
A B C D E F G H RECORRIDO: D,B,G,H
A B C D E F G H RECORRIDO: D,B,G,H,E
A B C D E F G H RECORRIDO: D,B,G,H,E,F
A B C D E F G H RECORRIDO: D,B,G,H,E,F,C
RECORRIDO: D,B,G,H,E,F,C,A. A B C D E F G H
<ul><li>Crear el arbol </li></ul><ul><li>Insertar un nodo </li></ul><ul><li>Eliminar un nodo </li></ul>
TYPE TipoPuntero = TipoNodoABB; TipoNodoABB = RECORD info : TipoInfo; izquierdo : TipoPuntero; derecho: TipoPuntero; End; ...
Procedure Insertar_arbol_binario( var Raizarbol:  TipoPuntero;InfoNodo: TipoInfo); Var NuevoNodo: TipoPuntero; (*puntero p...
While ptr <> NIL Do begin anterior : = ptr; if ptr^.info.clave > ClaveNueva then ptr := ptr^.izquierdo else ptr := ptr^.de...
Eliminar elementos ya existentes. (a)Eliminación de un nodo hoja sólo consiste  en anular el puntero de su nodo padre (b)E...
Procedure SuprimirNodo (Var RaízArbol : Tipo_Puntero;  ptr, anterior: Tipo_ Puntero); (* Suprime el nodo apuntado por Ptr ...
Else (* Caso b.3 supresión de nodo con dos hijos*) if(ptr^.derecho <> NIL) AND (ptr^.izquierdo <> NIL) then begin (* Encon...
(* Copiar la información a reemplazar en el nodo*) ptr^.info:= temp^.info; if anterior = Ptr then anterior^.izquierdo:= te...
else (* Caso b.2 Nodo con un hijo*) (* Inicializa uno de los campos punteros de nodo (anterior) dependiendo si tiene un hi...
Próxima SlideShare
Cargando en…5
×

Arboles

896 visualizaciones

Publicado el

Presentación sobre arboles descripción, conceptos, tipos de recorrido y pseudocodico

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
896
En SlideShare
0
De insertados
0
Número de insertados
1
Acciones
Compartido
0
Descargas
13
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Arboles

  1. 2. MiEmpresa Ventas Producción Portátiles Pc’s Ve Internacional Europa Asia América
  2. 4. A B C D E F G I H Nodo RAIZ
  3. 5. A B C D E F G H C: es padre de F y G F y G son Hijos de C F y G son hermanos
  4. 6. A B C D E F G H D: Es un nodo interno H: es un nodo hoja
  5. 7. A B C D E F G H Subárbol Izquierdo de B Subárbol derecho de B
  6. 8. A B C D E F G H Nivel 0 Nivel 1 Nivel 2 Nivel 3
  7. 9. A B C D E F G H I J K
  8. 10. A B C D E F G H I J K Nodo Altura Nivel Grado A 3 0 2 B 2 1 2 C 2 1 3 D 1 2 2 E 0 2 0 F 1 2 1 G 0 2 0 H 0 2 0 I 0 3 0 J 0 3 0 K 0 3 0
  9. 11. A B C D E F G H I
  10. 12. A B C D E F G H I A B C D E F G H I J K
  11. 13. A B C D E F G H I A C B E D F G H I
  12. 14. A C B D E F G H I A C B D E F G H I
  13. 15. A B C D E F G H I J 1 2 3 4 5 6 7 8 9 10 A(i) es el nodo padre del nodo i A(4)=B es el nodo padre del nodo D 0 1 1 2 2 5 5 5 3 3
  14. 16. Enlace Izquierdo Información Enlace Derecho
  15. 17. + * ^ A B / 35 C D - A - + ^ * - B - B 35
  16. 18. A B C D E F G H
  17. 20. A B C D E F G H RECORRIDO: D,B
  18. 21. A B C D E F G H RECORRIDO: D,B,A
  19. 22. A B C D E F G H RECORRIDO: D,B,A,G
  20. 23. A B C D E F G H RECORRIDO: D,B,A,G,E
  21. 24. A B C D E F G H RECORRIDO: D,B,A,G,E,H
  22. 25. A B C D E F G H RECORRIDO: D,B,A,G,E,H,C
  23. 26. RECORRIDO: D,B,A,G,E,H,C,F. A B C D E F G H
  24. 27. A B C D E F G H
  25. 29. A B C D E F G H RECORRIDO: A,B
  26. 30. A B C D E F G H RECORRIDO: A,B,D
  27. 31. A B C D E F G H RECORRIDO: A,B,D,C
  28. 32. A B C D E F G H RECORRIDO: A,B,D,C,E
  29. 33. A B C D E F G H RECORRIDO: A,B,D,C,E,G
  30. 34. A B C D E F G H RECORRIDO: A,B,D,C,E,G,H
  31. 35. RECORRIDO: A,B,D,C,E,G,H,F A B C D E F G H
  32. 36. A B C D E F G H
  33. 38. A B C D E F G H RECORRIDO: D,B
  34. 39. A B C D E F G H RECORRIDO: D,B,G
  35. 40. A B C D E F G H RECORRIDO: D,B,G,H
  36. 41. A B C D E F G H RECORRIDO: D,B,G,H,E
  37. 42. A B C D E F G H RECORRIDO: D,B,G,H,E,F
  38. 43. A B C D E F G H RECORRIDO: D,B,G,H,E,F,C
  39. 44. RECORRIDO: D,B,G,H,E,F,C,A. A B C D E F G H
  40. 45. <ul><li>Crear el arbol </li></ul><ul><li>Insertar un nodo </li></ul><ul><li>Eliminar un nodo </li></ul>
  41. 46. TYPE TipoPuntero = TipoNodoABB; TipoNodoABB = RECORD info : TipoInfo; izquierdo : TipoPuntero; derecho: TipoPuntero; End; Crear un ABB vacío. Procedure InicializaArbol(var RaizArbol: TipoPuntero); Begin RaizArbol := NulL; End;
  42. 47. Procedure Insertar_arbol_binario( var Raizarbol: TipoPuntero;InfoNodo: TipoInfo); Var NuevoNodo: TipoPuntero; (*puntero para nodo nuevo*) Ptr, Anterior:TipoPuntero; (* usado para buscar en el ABB*) ClaveNueva: TipoClave;(* clave del nuevo nodo a insertar*) BEGIN (* Crear un nuevo nodo*) New(NuevoNodo); NuevoNodo^.izquierdo:= NIL; NuevoNodo^.derecho:= NIL; NuevoNodo^.info:= InfoNodo; (* Buscar el lugar de inserción*) ptr: = RaizArbol; Anterior: = NIL;
  43. 48. While ptr <> NIL Do begin anterior : = ptr; if ptr^.info.clave > ClaveNueva then ptr := ptr^.izquierdo else ptr := ptr^.derecho end; if anterior = NIL then raizarbol = NuevoNodo else if anterior^.info.clave > ClaveNueva then anterior^.izquierdo: = Nuevonodo else anterior^.derecho: = Nuevonodo END;
  44. 49. Eliminar elementos ya existentes. (a)Eliminación de un nodo hoja sólo consiste en anular el puntero de su nodo padre (b)Eliminación de un nodo con un hijo, es necesario reasignar el puntero del padre hacia el hijo. (c)Eliminación de un nodo con dos hijos : Reemplazar el nodo que deseamos suprimir con el nodo de valor más próximo al valor del nodo suprimido. Así será posible hacer el reemplazo por &quot;El mayor más cercano&quot; o &quot;El menor más cercano&quot;, dependiendo de qué subárbol sea escogido el nodo.
  45. 50. Procedure SuprimirNodo (Var RaízArbol : Tipo_Puntero; ptr, anterior: Tipo_ Puntero); (* Suprime el nodo apuntado por Ptr sobre el árbol binario con puntero RaizArbol, Anterior es un puntero al nodo padre ( NIL si el nodo a suprimir es el nodo Raiz*) Var temp: Tipo_Puntero; BEGIN (*Caso b.1 Supresión de una hoja*) if(ptr^.derecho = NIL) AND (ptr^.izquierdo = NIL) then IF Anterior = NIL then (*Nodo(ptr) es el último en el árbol) RaizArbol:= NIL else if anterior^.derecho = Ptr then anterior^.derecho : = NIL else anterior^.izquierdo: = NIL
  46. 51. Else (* Caso b.3 supresión de nodo con dos hijos*) if(ptr^.derecho <> NIL) AND (ptr^.izquierdo <> NIL) then begin (* Encontrar el valor para reemplazar, valor más próximo al eliminado*) anterior: = ptr; temp := ptr^.izquierdo; While temp^.derecho<> NIL Do begin anterior:= temp; temp : = temp^.derecho end;
  47. 52. (* Copiar la información a reemplazar en el nodo*) ptr^.info:= temp^.info; if anterior = Ptr then anterior^.izquierdo:= temp^.izquierdo else anterior^.derecho:= temp^.izquierdo; ptr:= temp; end
  48. 53. else (* Caso b.2 Nodo con un hijo*) (* Inicializa uno de los campos punteros de nodo (anterior) dependiendo si tiene un hijo a la derecha o izquierda*) if ptr^.derecho <>NIL then (* Hay un hijo derecho*) if anterior = NIL then RaizArbol:= Ptr^.derecho else if anterior^.derecho=ptr then anterior^.derecho := ptr^.derecho else anterior^.izquierdo := ptr^.derecho else(* hay un hijo izquierdo*) if anterior = NIL then RaizArbol:= Ptr^.izquierdo else if anterior^.derecho=ptr then anterior^.derecho := ptr^.izquierdo else anterior^.izquierdo := ptr^.izquierdo; dispose (ptr); END;

×