Facultad de Ingeniería
Escuela de ingeniería de sistemas
ESTRUCTURA DE DATOS Y ALGORITMOS
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:
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.
"Los punteros son variables que guardaran en la memoria la dirección de otra variable"
en este caso la de una estructura llamado nodo.
Los recorridos se clasifican de acuerdo al momento en que se visita la raíz del árbol y los
subárboles izquierdo y derecho.
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. Visitar la raíz.
Recorrido en Postorden
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;
}
};
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--){
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;
}