1
INSTITUTO TECNOLOGICO SUPERIOR DE FELIPE
CARRILLO PUERTO
MATERIA:
ESTRUCTURA DE DATOS
DOCENTE:
MIL. NIELS HENRYK ARANDA CUEVAS
UNIDAD 4:
ESTRUCTURAS NO LINEALES
ALUMNO:
ELIEZER BALAM SANTOS
CARRERA:
INGENIERIA EN SISTEMAS COMPUTACIONALES
GRUPO:
B
2
INTRODUCCION:
Los árboles son formas de manejo de datos de apuntadores para estar
ubicando información de los datos siempre y cuando manteniendo la jerarquía
de los datos, como su nombre de árbol es una serie de directorios de datos
donde se almacena información y podemos realizar recorridos de ciertas
formas para poder localizar un elemento ya que se pueden definir en ramas y
cada rama es un camino que podemos seguir para llegar a la información.
PROGRAMA DONDE SE EMPLEA UN ARBOL.
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#define maxpila 100
using namespace std;
struct nodo
{
int info;
struct nodo *llink;
struct nodo *rlink;
}*raiz;
struct PILA{
int tope;
struct nodo *cont[maxpila];
};
void limpiarpila(struct PILA *pila) {
pila->tope=0;
}
3
bool pilavacia (struct PILA *pila){
bool valor;
if (pila->tope==0) valor=true;
else valor = false;
return valor;
}
bool pilallena (struct PILA *pila){
bool valor;
if (pila->tope==maxpila) valor=true;
else valor = false;
return valor;
}
void meterpila(struct PILA *pila, struct nodo *p) {
if (pilallena (pila) == false){
pila->tope=pila->tope+1;
pila->cont[pila->tope]=p;
}
else cout << "\nERROR: No se puede insertar en la pila, ya que esta llena";
}
void sacarpila(struct PILA *pila, struct nodo **q){
if (pilavacia(pila)==false){
*q=pila->cont[pila->tope];
4
pila->tope--;
}
else cout << "\nERROR: No se puede sacar de la pila, ya que esta vacia";
}
void creararbol(){
struct nodo *p, *q, *r;
int n, i;
cout << "Cuantos nodos va a tener el arbol?";
cin >> n;
raiz = (struct nodo *)malloc(sizeof(struct nodo));
cout << "Por favor digite la info del nodo raiz del arbol: ";
cin >> raiz->info;
raiz->llink = NULL;
raiz->rlink = NULL;
for (i=2;i<=n;i++){
p = (struct nodo *) malloc(sizeof(struct nodo));
cout << "Por favor digite la info del nodo " << i << " del arbol: ";
cin >> p->info;
p->llink = NULL;
p->rlink = NULL;
q=raiz;
while (q!=NULL){
5
r=q;
if (p->info > q->info) q=q->rlink;
else q=q->llink;
}
if (p->info > r->info) r->rlink=p;
else r->llink=p;
}
}
void recorrerprofDerecha(){
struct PILA pila;
struct nodo *p;
int cont=0;
limpiarpila(&pila);
meterpila (&pila, raiz);
cout << "\n\nLos datos del arbol recorrido en profundidad son: \n";
while (pilavacia(&pila)==false){
sacarpila (&pila,&p);
cout << endl << p->info;
if (p->rlink != NULL) {
meterpila (&pila, p->rlink);
cont++;
6
}
}
cout << "\n\nLos datos del arbol insertados a la derecha son: \n"<<cont;
}
void recorrerprofIzquierda(){
struct PILA pila;
struct nodo *p;
int cont=0;
limpiarpila(&pila);
meterpila (&pila, raiz);
cout << "\n\nLos datos del arbol recorrido en profundidad son: \n";
while (pilavacia(&pila)==false){
sacarpila (&pila,&p);
cout << endl << p->info;
if (p->llink != NULL){
meterpila (&pila, p->llink);
cont++;
7
}
}
cout << "\n\nLos datos del arbol insertados a la izquierda son: \n"<<cont;
}
int main(void)
{
creararbol();
recorrerprofDerecha();
recorrerprofIzquierda();
getch();
return 0;
}
DESCRIPCION DEL PROGRAMA:
El programa anterior es un poco complejo ya que tiene muchas partes de
código pero lo principal que realiza, es leer varios valores donde se almacena
una gran cantidad de información, y lo que va realizar es ir transformando las
ramas del árbol dependiendo la cantidad de información que vamos a estar
ingresando, también manejando datos de pila y los datos de la cola.
8
CONCLUSION:
Como conclusión nosotros entendimos esta forma de manejo de datos de
varias maneras y también a utilizarlos mediante los métodos anteriores vistos y
que van a ser de gran importancia en nuestra formación profesional, Como
conclusión tenemos que los árboles son algo parecido a los nodos y lo que
hacen es realizar la Administración de grupos de nodos que van a tener una
jerarquía de datos y apuntadores donde se maneja información.
Top Related