qué es un árbol

6
¿Qué es un árbol? Un árbol es una estructura de datos no lineal puesto que cada elemento apunta a uno o varios elementos del mismo tipo; esto es dado un elemento, no hay un único camino a seguir. El elemento que apunta a otro es llamado padre , mientras que el elemento apuntado se conoce como hijo . Todos los elementos tienen un padre a excepción de la raíz. Puede decirse que un árbol esta formado por subarboles resaltando así su naturaleza recursiva . ¿Qué es un árbol binario? Un ARBOL BINARIO es aquel es el que cada elemento apunta como máximo a otros 2 elementos, comúnmente llamados hijo izquierdo y hijo derecho. ¿Qué es un arbol binario de busqueda? Un arbol binario de buque da o ABB, es un arbol binario en el cual para todo elemento, los elementos mayores a él, se ubican en su rama derecha, mientras que los elementos menores van en su rama izquierda. Cada elemento se almacena una sola vez por lo que no existen elementos repetidos.

Upload: javier-chavez

Post on 16-Sep-2015

215 views

Category:

Documents


0 download

DESCRIPTION

que es un arbol para c++

TRANSCRIPT

Qu es un rbol?

Unrboles unaestructura de datosno lineal puesto que cada elemento apunta a uno o varios elementos del mismo tipo; esto es dado un elemento, no hay un nico camino a seguir. El elemento que apunta a otro es llamadopadre, mientras que el elemento apuntado se conoce comohijo. Todos los elementos tienen un padre a excepcin de la raz. Puede decirse que unrbolesta formado porsubarbolesresaltando as su naturalezarecursiva.

Qu es un rbol binario?

Un ARBOL BINARIO es aquel es el que cada elemento apunta como mximo a otros 2 elementos, comnmente llamados hijo izquierdo y hijo derecho.

Qu es un arbol binario de busqueda?

Un arbol binario de buque da oABB,es un arbol binario en el cual para todo elemento, los elementos mayores a l, se ubican en su rama derecha, mientras que los elementos menores van en su rama izquierda.Cada elemento se almacena una sola vezpor lo que no existen elementos repetidos.

Ya con estas definiciones claras sobre arboles;ahora estos son conceptos generales de lo que es un arbol, para poder implementarlos en lenguaje C++ tenemos que tener conocimientos previos sobrelistas enlazadasy su implementacin.

Cada elemento(nodo) de un rbol ABB cuenta con tres campos:

- Dato(numero, letra, palabra, etc), en este caso usaremos un numero(entero).- Puntero al nodo derecho- Puntero al nodo izquierdo

Los punteros tienen que ser del tipo arbol, ya que apuntaran a un nodo del mismo tipo, este seria un ejemplo de como se seria el tipo arbol ABB.

Primero creamos el nodo:struct nodo{ int dato; struct nodo *der; struct nodo *izq;};

"Los punteros son variables que guardaran en la memoria la direccin de otra variable" en este caso la de una estructura llamado nodo.

Recorridos de una arbol

Es la manera recursiva como pasaremos por cada nodo del arbol, existes tres formas.

Enorden:Si visitamos primero hijo izquierdo, luego el padre y finalmente el hijo derechoPreorden:Primero el padre, luego el hijo izquierdo y finalmente el hijo derecho.Postorden:Primero hijo izquierdo, luego el hijo derecho y finalmente el padre

Existe muchos mas conceptos sobre arboles ABB por ejemplo, recorridos por nivel, profundidad de una arbol, etc; por ahora solo dejare esos conceptos. Ahora pasaremos a laimplementacinen lenguaje C++ como le haba comentado al inicio del post.

Implementacion en C++

/*Name: Arboles Binaros de busquedaCopyright: casicodigo.blogspot.comAuthor: Jose Martin Cruz OtinianoDate: 27/10/12 12:27Description: Inserta elemento, muestra el arbol, muestra los recorridos(enOrden, preOrden, postOrden)*/#include #include using namespace std;

struct nodo{ int nro; struct nodo *izq, *der;};

typedef struct nodo *ABB;/* es un puntero de tipo nodo que hemos llamado ABB, que ulitizaremospara mayor facilidad de creacion de variables */

ABB crearNodo(int x){ ABB nuevoNodo = new(struct nodo); nuevoNodo->nro = x; nuevoNodo->izq = NULL; nuevoNodo->der = NULL;

return nuevoNodo;}void insertar(ABB &arbol, int x){ if(arbol==NULL) { arbol = crearNodo(x); } else if(x < arbol->nro) insertar(arbol->izq, x); else if(x > arbol->nro) insertar(arbol->der, x);}

void preOrden(ABB arbol){ if(arbol!=NULL) { cout nro der); }}

void enOrden(ABB arbol){ if(arbol!=NULL) { enOrden(arbol->izq); cout nro der); }}

void postOrden(ABB arbol){ if(arbol!=NULL) { postOrden(arbol->izq); postOrden(arbol->der); cout nro der, n+1);

for(int i=0; i