0% encontró este documento útil (0 votos)
110 vistas29 páginas

Arboles

Este documento describe los árboles y los árboles binarios. Explica que un árbol es una estructura no lineal donde cada nodo puede apuntar a uno o más nodos, y que los árboles binarios requieren que cada nodo tenga a lo sumo dos hijos. También cubre los diferentes tipos de recorridos de árboles (preorden, inorden y postorden) y operaciones básicas en árboles binarios de búsqueda como buscar, insertar y eliminar elementos.

Cargado por

Rudy Manzaneda
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
110 vistas29 páginas

Arboles

Este documento describe los árboles y los árboles binarios. Explica que un árbol es una estructura no lineal donde cada nodo puede apuntar a uno o más nodos, y que los árboles binarios requieren que cada nodo tenga a lo sumo dos hijos. También cubre los diferentes tipos de recorridos de árboles (preorden, inorden y postorden) y operaciones básicas en árboles binarios de búsqueda como buscar, insertar y eliminar elementos.

Cargado por

Rudy Manzaneda
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

ARBOLES

Ing. Rudy Luis Manzaneda Veizaga


Árboles

 Un árbol es una estructura no lineal en la que cada


nodo puede apuntar a uno o varios nodos.
 También se suele dar una definición recursiva: un
árbol es una estructura compuesta por un dato y
varios árboles.
Árboles
 Recursión
 Alguna vez hemos visto ese conjunto de muñecos de madera de origen ruso (matrioshkas) en la que
uno se encuentra dentro de otro.
 Dentro del primer muñeco, se encuentra un muñeco menor, y dentro de ese muñeco, hay otro
muñeco de menor tamaño y así sucesivamente.
 Un método recursivo es como los muñecos rusos: se reproducen a sí mismo con versiones más y más
pequeñas.
Introducción
Recorrido

 un árbol representa una jerarquía


Características

 Orden:
Es el numero potencial de hijos que puede tener cada elemento del árbol
 Grado:
Es el numero de hijos que tiene el elemento con mas hijos dentro del árbol
 Nivel:
se define para cada elemento del árbol como la distancia a la raíz, medida en nodos.
 Altura:
la altura de un árbol se define como el nivel del nodo de mayor nivel.
Como cada nodo de un árbol puede considerarse a su vez como la raíz de un árbol,
también podemos hablar de altura de ramas.
Árboles Binarios

 Un árbol binario, requiere de una estructura de NODO que permita almacenar el


dato correspondiente.
 además de una referencia al hijo izquierdo y una más al hijo derecho.
 El árbol será una liga al nodo raíz, a partir del cual, se podrá acceder al resto de la
estructura.
ARBOLES BINARIOS A

B C
 Tipo especial de árbol
 Cada nodo no puede tener mas de dos hijos D
 Un árbol puede ser un conjunto
 Vacío, no tiene ningún nodo RAIZ

 O constar de tres partes: A


Un nodo raíz y B C
Dos subárboles binarios: izquierdo y
derecho D E F G

 La definición de un árbol binario es H I J


recursiva
Sub. Izq. Sub. Der.
 La definición global depende de si misma
• A es el nodo raíz
• B es el padre de D y E
• C es el primo de B
• D y E son los hijos de B
• D, E, F, G, I son nodos externos o
hojas
• A, B, C, H son nodos internos
• La profundidad (nivel) de E es 2
• La altura del árbol es 3
• El grado del nodo B es 2

• Propiedad: (#aristas) = (#nodos) - 1


Representación de los Árboles Binarios
en Memoria
Representación de los Árboles Binarios
en Memoria
Algoritmo de Recorrido

 El modo evidente de moverse a través de las ramas de un árbol es siguiendo los


punteros (referencias), del mismo modo en que nos movíamos a través de las listas.
 Los recorridos dependen en gran medida del tipo y propósito del árbol
 Existen 3 formas de recorrer un árbol completo
 Se usa la recursividad
Algoritmo de Recorrido (Preorden)

Si seguimos el árbol del ejemplo en pre-orden, y el


proceso de los datos es sencillamente mostrarlos por
pantalla, obtendremos algo así:
 recorrido preorden
Algoritmo preOrder(v)
“visitar” nodo v
for each hijo w de v do
realizar recursivamente preOrder(w)
 Ejm: lectura de un documento desde el inicio hasta el final

26
Algoritmo de Recorrido (Inorden)

En este tipo de recorrido, el valor del nodo se


procesa después de recorrer la primera rama y
antes de recorrer la última.
Esto tiene más sentido en el caso de árboles
binarios, y también cuando existen ORDEN-1
datos, en cuyo caso procesaremos cada dato
entre el recorrido de cada dos ramas (este es el
caso de los árboles-b):
 recorrido inorder de un árbol binario
Algoritmo inOrder(v)
realizar recursivamente inOrder(leftChild(v))
“visitar” nodo v
realizar recursivamente inOrder(rightChild(v))

• impresión de una expresión aritmética


especialización de un recorrido
inorder
print “(“ antes de recorrer el subárbol
izquierdo
print “)” antes de recorrer el subárbol
derecho

28
Algoritmo de Recorrido (Postorden)
recorrido postorder
Algoritmo postOrder(v)
for each hijo w de v do
realizar recursivamente postOrder(w)
“visitar” nodo v

30
Nodo Cabecera y Hojas
 Un árbol binario: conjunto de nodos
typedef struct NodoAB{
 Solo se necesita conocer el nodo raíz= nodo cabecera Generico G;
NodoAB *izq, *der;
 Cada nodo }NodoAB;

 Tiene Contenido y
typedef struct NodoAB *AB;
 Dos enlaces: árbol hijo izquierdo, árbol hijo derecho

 Un nodo hoja, es aquel cuyos dos enlaces apunta a null


 Un nodo en un árbol tiene mas punteros a null que un nodo de
una lista

 De un árbol solo se necesita conocer su raíz


 La raíz, que es un nodo, puede definir al árbol o
Árboles Binarios de Búsqueda
 Árbol ordenado: el hijo de cada nodo está ordenado
 Árbol binario: árbol ordenado con todos los nodos internos de grado 2

Definición recursiva de árbol binario:


Un árbol binario es:
- un nodo externo (hoja) o
- un nodo interno (la raíz)
-dos árboles binarios (subárbol izquierdo y subárbol derecho)
Operaciones en ABB
 Buscar un elemento
 Insertar un elemento
 Eliminar un elemento
 Movimientos a través del árbol (IZQ, DER, RAIZ)
 Información
❑ Verificar si el árbol esta vacio
❑ Numero de Nodos
❑ Comprobar si el nodo es hoja
❑ Calcular el nivel del Nodo
❑ Calcular la altura del Arbol
Búsqueda en Árboles Binarios

 Se define de forma recursiva como:


 Si el árbol está vacío, terminamos la búsqueda: el elemento no está en el árbol.
 Si el valor del nodo raíz es igual que el del elemento que buscamos, terminamos la
búsqueda con éxito.
 Si el valor del nodo raíz es mayor que el elemento que buscamos, continuaremos la
búsqueda en el árbol izquierdo.
 Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la
búsqueda en el árbol derecho
BUSQUEDA DE UN NODO

 Dada una clave, devolver el nodo que la contiene Buscar(raiz,25)


Buscar(raiz,5)
 Se comienza en la raiz
 Si el arbol esta vacio
 No se encontro 8
 Si clave buscada es igual a la clave del nodo evaluado
 BINGO, LO ENCONTRE
3 20

 Si no 1 5 10
 Si la clave buscada es mayor a la del nodo evaluado
4 No existe
 Buscar en el subarbol derecho
 Si no
 Buscar en el subarbol izquierdo
Insertar un elemento en Árboles
Binarios
 Para insertar un elemento nos basamos en el algoritmo de búsqueda.
 Si el elemento está en el árbol no lo insertaremos.
 Si no lo está, lo insertaremos a continuación del último nodo visitado.
 Para ello, se necesita un puntero auxiliar para conservar una referencia al padre del
nodo raíz actual. El valor inicial para ese puntero es NULL.
INSERCION DE UN NODO

 Muy parecido a la busqueda Insertar(raiz,15)

 Debo insertar en la posicion correcta 15>8…der

15<20…izq
 El arbol debe mantener sus propiedades 8

 Pasos: 3
15>10
…der 20

 Crear una nueva hoja 1 5 10 Insertar


aqui

 Buscar en el arbol donde ponerla 4


15
 Enlazar el nuevo nodo al arbol
Eliminación

 Se trata de un nodo hoja: en ese caso lo borraremos directamente.


 Se trata de un nodo rama: en ese caso no podemos eliminarlo, puesto que perderíamos
todos los elementos del árbol de que el nodo actual es padre.
 En su lugar buscamos el nodo más a la izquierda del subárbol derecho, o el más a
la derecha del subárbol izquierdo e intercambiamos sus valores.
ELIMINACION DE UN NODO
 Es mas compleja que la insercion Eliminar(raiz,34)
 Al sacar un nodo del arbol
 El arbol debe mantener sus propiedades 34
28
 El arbol debe reajustarse
18 90
 Pasos:
 Buscar el nodo p que se va a eliminar 6 25 100
 Si el nodo a eliminar tiene menos de dos hijos
20 28
 Subir el nodo hijo a la pos. del nodo eliminado
 Si no nmayor
 Ubicar el nodo q con la mayor de las claves menores
 Reemplazar contenido de p con el del nodo q
 Eliminar el nodo q que se encontro el el primer paso
Otras Operaciones
 Comprobar su un árbol esta vacío
 ARBOL A raíz= null;

 Calcular el numero de nodos


 Contador de los nodos que se están insertando
 Hacer el algoritmo de Recorrido

 Comprobar si el nodo es hoja


 Si no existen hojas dentro de un nodo y es el ultimo es una hoja

 Calcular el nivel de un nodo


 Calcular el novel del nodo, cada vez que se incremente aumentara su valor

También podría gustarte