You are on page 1of 7

UNIVERSIDAD NACIONAL DE TRUJILLO

Facultad de Ingeniería
Escuela de ingeniería de sistemas
ESTRUCTURA DE DATOS Y ALGORITMOS

ARBOLES BINARIOS: RECORRIDOS


INTEGRANTES:
 LLAVE VERGARAY, José Alonso
 VARGAS ZAVALETA, Erick Alfredo

DOCENTE:
ING. ZORAIDA VIDAL MELGAREJO

DICIEMBRE – 2017

TRUJILLO
TEORÍA GENERAL DE ARBOLES BINARIOS
Los árboles a diferencia de las listas son una estructura de datos de no lineal, atendiendo
más a una estructura de tipo jerárquico. Los árboles son, sin duda, una de las estructuras
de datos no lineales, empleadas en informática, tanto para resolver problemas de
hardware como de software.
Los árboles genealógicos y los organigramas son ejemplos comunes. Entre otras
aplicaciones, los árboles se emplean para analizar circuitos eléctricos y para representar
la estructura de fórmulas matemáticas, así como para organizar la información de bases
de datos, para representar la estructura sintáctica de un programa fuente en
compiladores y para la toma de decisiones.
DEFINICIÓN DE ÁRBOLES BINARIOS:
Los árboles binarios son estructuras de datos muy similares a las listas doblemente
enlazadas, en el sentido que tienen dos punteros que apuntan a otros elementos, pero
no tienen una estructura lógica de tipo lineal o secuencial como aquellas, sino
ramificada. Tienen aspecto de árbol, de ahí su nombre.
Un árbol binario es una estructura de datos no lineal en la que cada nodo puede apuntar
a uno o máximo a dos nodos. Este tipo de árbol se caracteriza porque tienen un vértice
principal y de él se desprende dos ramas. La rama izquierda y la rama derecha a las que
también se les conoce como subárboles.
EJEMPLO:

El árbol genealógico es un árbol binario.

Cada nodo tiene dos hijos

Es significativo el orden de los subárboles.


CARACTERISTICAS DE UN ARBOL BINARIO:

Cada nodo del árbol binario contiene:

 Una referencia a su información


 Un apuntador a su hijo izquierdo
 Un apuntador a su hijo derecho.

¿QUÉ ES UN ÁRBOL BINARIO DE BÚSQUEDA?

Un árbol binario de buque da o ABB, es un árbol 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.

Ya con estas definiciones claras sobre arboles; ahora estos son conceptos generales de
lo que es un árbol, para poder implementarlos en lenguaje C++ tenemos que tener
conocimientos previos sobre listas enlazadas y su implementación.

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 árbol, ya que apuntaran a un nodo del mismo tipo,
este sería un ejemplo de cómo se sería el tipo árbol 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 dirección de otra variable"
en este caso la de una estructura llamado nodo.

RECORRIDOS DE UN ÁRBOL BINARIO:

Los recorridos se clasifican de acuerdo al momento en que se visita la raíz del árbol y los
subárboles izquierdo y derecho.

Existen tres recorridos:

 Recorrido en Preorden
 Recorrido en orden simétrico o inorden
 Recorrido en orden final o Postorden

Recorrido en Preorden

1. Visitar la raíz.

2. Recorrer subárbol izquierdo en preorden.

3. Recorrer subárbol derecho en preorden.


Recorrido en Simétrico (In Orden):

1. Recorrer subárbol izquierdo en simétrico.

2. Visitar la raíz.

3. Recorrer subárbol derecho en simétrico.

Recorrido en Postorden

1. Recorrer subárbol izquierdo en orden final.

2. Recorrer subárbol derecho en orden final.

3. Visitar la raíz.
RECORRIDO DE UN ARBOL BINARIO

#include "stdafx.h"
#include <iostream>
using namespace std;

struct nodo{
int valor;
nodo* izq;
nodo* der;
nodo(){
valor = (1<<30);
izq = NULL;
der = NULL;
}
nodo(int _v){
valor = _v;
izq = NULL;
der = NULL;
}
};

void insertar(int val, nodo **n){


if((*n) == NULL)
*n = new nodo(val);
else
if(val > (*n)->valor)
insertar(val, &((*n)->der));
else
insertar(val, &((*n)->izq));
}

void preorden(nodo *n){


if(n != NULL){
cout << (n->valor) << " ";
preorden(n->izq);
preorden(n->der);
}
}

void inorden(nodo *n){


if(n != NULL){
inorden(n->izq);
cout << (n->valor) <<" ";
inorden(n->der);
}
}

void postorden(nodo *n){


if(n != NULL){
postorden(n->izq);
postorden(n->der);
cout << (n->valor) << " ";
}
}

int main(){
nodo *raiz;
int c=0;

raiz = NULL;
int nro,tmp;
cout<<"INDIQUE LA CANTIDAD DE NUMEROS DEL
ARBOL"<<endl;
cin >> nro;
cout<<"ELEMENTOS DEL ARBOL"<<endl;
while(nro--){

cin >> tmp;

insertar(tmp, &raiz);
}
cout << "PRE-ORDEN" << endl;
preorden(raiz);
cout <<endl<< "-------------" << endl;
cout << "IN-ORDEN" << endl;
inorden(raiz);
cout <<endl<< "-------------" << endl;
cout << "POST-ORDEN" << endl;
postorden(raiz);
cout <<endl<< "-------------" << endl;
system("pause");
return 0;
}