1 operaciones sobre un árbol recorrer árbol – preorden – inorden – postorden inserción nodo...

24
1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular profundidad del árbol Contar nodos Contar hojas.

Upload: melania-de-los-santos

Post on 18-Apr-2015

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

1

Operaciones sobre un árbol• Recorrer árbol

– Preorden– Inorden– Postorden

• Inserción nodo• Eliminar nodo• Buscar nodo con información• Sumar los nodos• Calcular profundidad del árbol• Contar nodos• Contar hojas.

Page 2: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

2

Recorridos de un árbol de Búsqueda Binaria (ABB)

• Recorrido en preorden (prefijo)– Visita la raíz.– Recorre el subárbol izquierdo.– Recorre el subárbol derecho.

A

B C

D E F

H IG

RID

Preorden = A B D G C E H I F

Page 3: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

3

Recorridos de un árbol de Búsqueda Binaria (ABB)

PREORDEN (NODO){NODO es un dato de tipo apuntador}{INFO, IZQ, DER son campos del registro}Si nodo != null entonces

{Visitar NODO {escribir NODO.INFO}llamar a preorden con NODO.IZQ{llamada recursiva a preorden con larama izquierda del nodo en cuestión}llamar a preorden con NODO.DER{llamada recursiva a preorden}

}

Page 4: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

4

Recorridos de un árbol de Búsqueda Binaria (ABB)

• Recorrido en inorden (infijo)– Recorre el subárbol izquierdo.– Visita la raíz– Recorre el subárbol derecho.

A

B C

D E F

H IG

Inorden: D G B A H E I C F

IRD

Page 5: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

5

Recorridos de un árbol de Búsqueda Binaria (ABB)

INORDEN (NODO){NODO es un apuntador a registro}

Si NODO != null entonces{

INORDEN (NODO.IZQ);Escribir NODO.INFO;INORDEN (NODO.DER);

}

Page 6: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

6

Recorridos de un árbol de Búsqueda Binaria (ABB)

• Recorrido en postorden (postfijo)– Recorre el subárbol izquierdo.– Recorre el subárbol derecho.– Visita la raíz.

A

B C

D E F

H IG

Postorden : G D B H I E F C A

IDR

Page 7: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

7

Recorridos de un árbol de Búsqueda Binaria (ABB) (cont.)

POSTORDEN (NODO)Si NODO != null entonces

{POSTORDEN (NODO.IZQ);POSTORDEN (NODO.DER);Escribir NODO.INFO;

}

Page 8: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

8

Inserción en un ABB

• La inserción es una operación que se puede realizar eficientemente en un árbol binario de búsqueda. La estructura crece conforme se inserten elementos al árbol.

• Los pasos que deben realizarse para insertar un elemento a un ABB son los siguientes:– Debe compararse el valor o dato a insertar con la

raíz del árbol. Si es mayor, debe avanzarse hacia el subárbol derecho. Si es menor, debe avanzarse hacia el subárbol izquierdo.

Page 9: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

9

Inserción en un ABB (cont.)

• Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las siguientes condiciones– El subárbol derecho es igual a vacío, o el subarbol

izquierdo es igual a vacío; en cuyo caso se procederá a insertar el elemento en el lugar que le corresponde.

– El valor o dato que quiere insertarse es igual a la raíz del árbol; en cuyo caso no se realiza la inserción.

Page 10: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

10

Inserción en un ABB (cont.)AlgoritmoSi NODO ≠ Null{

Si (INFOR < NODO.INFO) Regresar a INSERCION1 con NODO.IZQ e INFOR

sinosi ( INFOR > NODO.INFO)

Regresar a INSERCION1 con NODO.DER e INFOR sino Escribir “El nodo ya se encuentra en el árbol”

} // } si else

CREA (OTRO) {Crear un nuevo nodo}Hacer OTRO.IZQ = null, OTRO.DER = null,OTRO.INFO = INFOR y NODO = OTRO

}

Page 11: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

11

Inserción en un ABB (cont.)

• Supóngase que quieren insertarse las siguientes los siguientes datos en un árbol binario de búsqueda que se encuentra vacío.

120 –87 – 43 – 65 – 140 – 99 – 130 – 22 – 56

Page 12: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

12

Inserción en un ABB (cont.) Solución

120 –87 – 43 – 65 – 140 – 99 – 130 – 22 – 56

120

87 140

43 130

56

I

22 65

99

Page 13: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

13

Eliminar un nodo

Para eliminar un nodo existen los siguientes casos:1. Si el elemento a borrar es Terminal (hoja), 2. Si el elemento a borrar tiene un solo hijo, 3. Si el elemento a borrar tiene los dos hijo,

Page 14: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

14

Eliminar un nodo (cont.)

• Caso 1Si el elemento a borrar es terminal (hoja),

simplemente se elimina.aux = aux.izq = null

Ejemplo eliminar nodo 7

81

97

6

81

97

6

81

9

6

Page 15: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

15

Eliminar un nodo (cont.)

• Caso 2Si el elemento a borrar tiene un solo hijo,

entonces tiene que sustituirlo por el hijo

81

9

7

1 9

7

81

9

7

Ejemplo: eliminar nodo 8

Page 16: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

16

Eliminar un nodo (cont.)•Caso 3Si el elemento a borrar tiene los dos hijos, entonces se tienen que sustituir por el nodo que se encuentra mas a la izquierda en el subárbol derecho, o por el nodo que se encuentra mas a la derecha en el subárbol izquierdo.

Ejemplo: eliminar el 6

81

97

6

81

97

7

81

9

7

Page 17: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

17

Eliminar un nodo (cont.)si NODO !=null entoncessi Dato < NODO.info

Eliminación (NODO.izq, Dato) si no

si dato > NODO.INFO entonces Eliminación (NODO.der, Dato

si nootro = NODO si otro.der == null entonces NODO = otro.izqsi no si otro.izq == null entonces NODO = otro.der

Page 18: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

18

Eliminar un nodo (cont.)

Si no {aux = otro.izq

aux1 = Aux while (aux.der != null )

aux1 = auxaux = aux.der } otro.info = aux.info otro = aux

aux1.der = aux.izq quita (otro) (null)

si no Escribir (‘el nodo no se encuentra en el árbol’) }

Page 19: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

19

Eliminar un nodo (cont.)

• Elimina el 22,. 99, 87, 120, 140, 135, 5693

87

43 99

120

130

140

65

56

22

135

Page 20: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

20

Buscar nodo con informaciónSi dato < NODO.info

Si NODO.IZQ == null Escribir “El nodo no se encuentra en el árbol”

Si no Búsqueda (NODO.izq,dato)

Si no Si Dato > NODO.INFO entonces Si NODO.DER = null

Escribir “No se encuentra”Si no Búsqueda (NODO.der,dato)

Si no Escribir “El NODO se encuentra en el árbol”si nodo != null

si Dato < NODO .INFOBúsqueda (Nodo.izq,Dato)

si nosi Dato > No dato.der

Búsqueda (No dato.der,dato)si no

escribir “El Dato se encuentra”Si no Escribir “El dato no se encuentra en el árbol”

Page 21: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

21

Contar nodos

//cuenta los nodos que hay en el árbol

public static int nodo (nodo raiz){if (raiz == null) return 0;else

return (1+ Nodo( raiz.der) + Nodo( raiz.izq))}

Page 22: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

22

Sumar los nodos

//suma los nodos que hay en el árbolpublic static int sumaNodo( nodo raiz){

if(raiz == null) return 0;else

Return (sumaNodo (raiz.der) + sumaNodo (raiz.izq) )}

Page 23: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

23

Calcular profundidad del árbol

// calcula la profundidad de un árbolpublic int profundidad (Nodo raiz) {

if (raiz == null) return 0;If (profundidad (raiz.der) > profundidad (raiz.izq))

return profundidad (raiz.der) + 1;else

return profundidad( raiz.izq) + 1}

Page 24: 1 Operaciones sobre un árbol Recorrer árbol – Preorden – Inorden – Postorden Inserción nodo Eliminar nodo Buscar nodo con información Sumar los nodos Calcular

24

Contar hojas.

// Cuenta hojas de un árbolpublic int contarHojas (Nodo raiz) {

if (raiz = = null) return 0;If ((raiz.der == null) && (raiz.izq == null))

Return 1;else

return contarHojas (raiz.izq) + contarHojas (raiz.der) }