Arboles

24
REPUBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACION SUPERIOR UNIVERSIDAD CENTROCCIDENTAL LISANDRO ALVARADO

description

Arboles

Transcript of Arboles

Page 1: Arboles

REPUBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUCACION

SUPERIOR

UNIVERSIDAD CENTROCCIDENTAL LISANDRO ALVARADO

Page 2: Arboles

Es una estructura de datos no lineal, donde

la organización de los datos es de forma

Jerárquica o de niveles

La relación entre los elementos del árbol es de uno a

muchos, es decir, a cada elemento del árbol le pueden

seguir varios elementos.

Page 3: Arboles

Los objetos o elementos que conforman un árbol

son llamados nodos.

Un árbol es un conjunto finito de nodos, donde:

Existe un nodo único conocido como el nodo RAIZ.

Los nodos se relacionan entre ellos dando lugar a

las relaciones de

Padre, Antecesor, Hijo, Sucesor, Hermanos, etc.

Estructura de un Árbol

Page 4: Arboles

Es un tipo de árbol que se caracteriza por el hecho

de que cada nodo tiene grado menor o igual a 2, es

decir, cada nodo del árbol tiene un máximo de 2

hijos

Estructura de un Árbol

Page 5: Arboles

Nodo Raíz: Primer elemento del árbol, solo existe un nodo raíz en un árbol.

Nodo Hoja o Terminal: Nodos que no tienen hijos.

Nodo Interior: Es un nodo que no es raíz ni Terminal.

Nodo Padre (Antecesor): nodo que tiene al menos un hijo (Un nodo X es padre de Y si apunta al nodo Y).

Nodo Hijo (Sucesor): nodo que tiene un padre. (Un Y es hijo de X si es apuntado por un nodo X). Un hijo puede ser IZQUIERDO o DERECHO, dependiendo si esta a la izquierda o ala derecha del nodo padre.

Nodos Hermanos: Nodos que son descendientes directos de un mismo padre.

Estructura de un Árbol

Page 6: Arboles

- NODO RAIZ A

- NODOS HOJAS E,F,G,H

- NODOS INTERIORES B,C

- NODOS PADRES A (De B y C), B(De E y F) y C(De G y H)

- NODOS HIJOS B,C (De A), G,H(De C) E,F (De B)

- NODOS HERMANOS B y C, E y F, G y H

Estructura de un Árbol

Page 7: Arboles

Ancestro: Un nodo X es ancestro del nodo Y, si X es padre de Y o si X es padre algún nodo ancestro de Y. (Por ejemplo el nodo raíz es un ancestro de todos los nodos del árbol.)

Descendiente: Un nodo Y es descendiente de X si Y es hijo de X, o si Y es hijo de algún nodo descendiente de X. (Por ejemplo todos los nodos de un árbol son descendientes del nodo raíz.)

Subárbol izquierdo: todos los descendientes por la izquierda de un nodo forman un subárbol izquierdo, cuya raíz es el hijo izquierdo de ese nodo.

Subárbol derecho: todos los descendientes por la derecha de un nodo forman un subárbol derecho, cuya raíz es el hijo derecho de ese nodo.

Estructura de un Árbol

Page 8: Arboles

Estructura de un Árbol

- Los Ancestros de I son: E, B y A

- Los Descendientes de C son : G, H y K

- El Sub-árbol izquierdo es el árbol de raíz B

- El Sub-árbol derecho es el árbol de raíz C

Page 9: Arboles

Grado de un Nodo: Es el número de descendientes directos o hijos de un nodo.

Grado del Árbol: Es el grado máximo de los nodos

del árbol.

Nivel de un Nodo: Es el numero de nodos que hay desde el nodo raíz hasta un nodo. El nodo raíz tiene

nivel 1, luego cada nodo tiene el nivel de su

padre+1.

Nivel del Árbol (Profundidad del Árbol o Altura del Árbol): Nivel máximo alcanzado por algún nodo del

árbol.

Estructura de un Árbol

Page 10: Arboles

- El Grado de B es 2, el grado de H es 0.

- El Grado del árbol es 2

- El Nivel de E es 3, de B es 2, de A es 1…

- El Nivel del árbol es 3.

Estructura de un Árbol

Page 11: Arboles

Es un árbol binario donde todos sus nodos tiene

dos hijos, menos los nodos del último nivel que son

nodos terminales.

De un árbol binario completo se puede decir que:

En cada nivel n hay 2 n-1 nodos, El Total de nodos

del árbol de Nivel N es igual a 2N -1

Árbol Binario Completo

- En el nivel 1 hay: 20 =1 nodo

- En el nivel 2 hay: 21 =2 nodo

- En el nivel 3 hay: 22 =4 nodo

- El total de nodos del árbol es: 23-1 = 7

Page 12: Arboles

Dado un árbol no binario, para convertirlo en

árbol binario se puede proceder de la

siguiente manera:

Cada nodo conservará solo a su hijo

izquierdo.

Cada nodo adoptará a su hermano

derecho como hijo derecho

CONSTRUCCIÓN DE UN ÁRBOL BINARIO A

PARTIR DE UN ARBOL NO BINARIO

Page 13: Arboles

CONSTRUCCIÓN DE UN ÁRBOL BINARIO A

PARTIR DE UN ARBOL NO BINARIO

Page 14: Arboles

Representación Enlazada

En la implementación enlazada se utilizan apuntadores para

tener acceso a los nodos del árbol. Así como en las listas

enlazadas, existe un apuntador externo que apunta a la raíz del

árbol, y luego a partir de allí se puede acceder a todos losnodos del árbol.

Los nodos en este caso, se conforman de tres campos:

Un campo para la información del nodo.

Un campo apuntador para apuntar al subárbol izquierdo y

otro para apuntar al subárbol derecho.

Page 15: Arboles

NIVEL DE IMPLEMENTACION

#ifndef Arbol_H

#define Arbol_H

template <class Tipo>

class Arbol;

#ifndef NODO_H

#define NODO_H

template <class Tipo>

class nodo

{

Tipo info;

nodo<Tipo>* izq;

nodo<Tipo>* der;

friend class Arbol<Tipo>;

};

#endif

Page 16: Arboles

template <class Tipo>

Arbol<Tipo>::Arbol() {

Raiz=NULL;

};

template <class Tipo>

bool Arbol<Tipo>::Vacia() {

return Raiz == NULL;

};

template <class Tipo>

bool Arbol<Tipo>::Llena() {

nodo<Tipo> *p; p=new nodo<Tipo>;

if (p==NULL)

return true;

else {

delete p;

return false;

}

};

NIVEL DE IMPLEMENTACION

Page 17: Arboles

Crear Nodo: Esta operación crea un nodo y lo asigna como raíz con

subárboles izquierdo y derecho vacíos y retorna la dirección de este

nodo.

NIVEL DE IMPLEMENTACION

template <class Tipo>

nodo<Tipo>* Arbol<Tipo>::CrearNodo(Tipo

Valor) {

Apuntador nuevo;

if (!Llena()) {

nuevo=new nodo<Tipo>;

nuevo->info=Valor;

nuevo->izq=NULL;

nuevo->der=NULL;

return nuevo;

};

};

Page 18: Arboles

Crear Hijo Derecho : Esta operación almacena un nodo como

el hijo derecho del nodo PTR.

NIVEL DE IMPLEMENTACION

template <class Tipo>

bool

Arbol<Tipo>::CrearHijoDer(Apuntador

p,Tipo Valor) {

Apuntador nuevo;

if (!Llena()) {

if ((p==NULL) || (p->der!=NULL))

return false;

else {

nuevo=CrearNodo(Valor);

p->der=nuevo;

return true;

};

}

else return false; };

Page 19: Arboles

CrearHijoIzq: Esta operación almacena un nodo como el hijo

izquierdo del nodo PTR.

NIVEL DE IMPLEMENTACION

template <class Tipo>

bool Arbol<Tipo>::CrearHijoIzq(Apuntador

p,Tipo Valor) {

Apuntador nuevo;

if (!Llena()) {

if ((p==NULL) || (p->izq!=NULL))

return false;

else {

nuevo=CrearNodo(Valor);

p->izq=nuevo; return true;

};

}

else

return false;

};

Page 20: Arboles

Combinar: Esta función combina dos árboles binarios A1 y A2

teniendo como unión la raíz cuya información es valor.

NIVEL DE IMPLEMENTACION

template <class Tipo>

nodo<Tipo>* Arbol<Tipo>::Combinar(Apuntador a1,Apuntador a2,Tipo Valor)

{

Apuntador nuevo;

if (!Llena())

{

nuevo=CrearNodo(Valor);

nuevo->izq=a1;

nuevo->der=a2;

return nuevo;

}

else

return NULL;

};

Page 21: Arboles

EliminarDer: Elimina el hijo derecho siempre que sea nodo

terminal y retorna el valor.

template <class Tipo>

bool Arbol<Tipo>::EliminarDer(Apuntador padre,Tipo &Valor)

{

Apuntador p;

p=padre->der;

if ((p->izq==NULL) && (p->der==NULL))

{

Valor=p->info;

padre->der=NULL;

delete p;

return true;

}

else

return false;

};

NIVEL DE IMPLEMENTACION

Page 22: Arboles

EliminarIzq: Elimina el hijo izquierdo siempre que sea nodo

terminal y retorna el valor.

NIVEL DE IMPLEMENTACION

template <class Tipo>

bool

Arbol<Tipo>::EliminarIzq(Apuntador

padre,Tipo &Valor)

{

Apuntador p;

p=padre->izq;

if ((p->izq==NULL) && (p->der==NULL))

{

Valor=p->info;

padre->izq=NULL;

delete p;

return true;

}

else

return false;

};

Page 23: Arboles

Eliminar: Elimina el nodo p siempre que sea nodo terminal y

retorna el valor.

NIVEL DE IMPLEMENTACION

template <class Tipo>

bool Arbol<Tipo>::Eliminar(Apuntador &p,Tipo &Valor)

{

if ((p->izq==NULL) && (p->der==NULL))

{

Valor=p->info;

delete p;

p=NULL;

return true;

}

else

return false;

};

Page 24: Arboles

Destructor: Liberar el espacio ocupado por el Árbol, para lo

cual llama a la función Liberar, que de forma recursiva libera el

Árbol.

NIVEL DE IMPLEMENTACION

template <class Tipo>

void Arbol<Tipo>::Liberar(Apuntador

&p) {

if (p!=NULL)

{

Liberar(p->izq);

Liberar(p->der);

delete p;

p=NULL;

};

};

template <class Tipo>

Arbol<Tipo>::~Arbol()

{

Liberar(Raiz);

};