You are on page 1of 12

I n s t i t u t o C a m b r i d g e d e Q u e r t a r o

c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Gua para Examen Extraordinario
Estructura de Datos
Unidad 1
Definiciones Generales.

Qu es un archivo?
Un archivo o fichero informtico es un conjunto de bits almacenado en un dispositivo. Un archivo es identificado por un
nombre y la descripcin de la carpeta o directorio que lo contiene. Los archivos informticos se llaman as porque son los
equivalentes digitales de los archivos en tarjetas, papel o microfichas del entorno de oficina tradicional. Los archivos
informticos facilitan una manera de organizar los recursos usados para almacenar permanentemente datos en un
sistema informtico.
En informtica, un archivo es un grupo de datos estructurados que son almacenados en algn medio y pueden ser usados
por las aplicaciones. La forma en que una computadora organiza, da nombre, almacena y manipula los archivos se
denomina sistema de archivos y suele depender del sistema operativo y del medio de almacenamiento (disco duro, disco
ptico, etc.).

Qu es un registro?
Un registro, en programacin, es un tipo de dato estructurado formado por la unin de varios elementos bajo una misma
estructura. Estos elementos pueden ser, o bien datos elementales (entero, real, carcter,...), o bien otras estructuras de
datos. A cada uno de esos elementos se le llama campo.
Un registro se diferencia de un vector en que ste es una coleccin de datos iguales, es decir, todos del mismo tipo,
mientras que en una estructura los elementos que la componen, aunque podran serlo, no tiene por qu ser del mismo
tipo.

Qu son los datos?
El dato es una representacin simblica (numrica, alfabtica, algortmica etc.), un atributo o una caracterstica de una
entidad. Los datos son hechos que describen sucesos y entidades. No tienen ninguna informacin. Puede significar un
nmero, una letra, o cualquier smbolo que representa una palabra, una cantidad, una medida o una descripcin. El dato
no tiene valor semntico (sentido) en s mismo, pero si recibe un tratamiento (procesamiento) apropiado, se puede utilizar
en la realizacin de clculos o toma de decisiones. Es de empleo muy comn en el mbito informtico y, en general,
prcticamente en cualquier disciplina cientfica.
En programacin, un dato es la expresin general que describe las caractersticas de las entidades sobre las cuales opera
un algoritmo.
En Estructura de datos, es la parte mnima de la informacin.

Qu es la informacin?
En sentido general, la informacin es un conjunto organizado de datos procesados, que constituyen un mensaje que
cambia el estado de conocimiento del sujeto o sistema que recibe dicho mensaje.
Desde el punto de vista de la ciencia de la computacin, la informacin es un conocimiento explcito extrado por seres
vivos o sistemas expertos como resultado de interaccin con el entorno o percepciones sensibles del mismo entorno. En
principio la informacin, a diferencia de los datos o las percepciones sensibles, tienen estructura til que modificar las
sucesivas interacciones del ente que posee dicha informacin con su entorno.




I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Qu es una Estructura de Datos?
Una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su
manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la
organizacin e interrelacin de stos y un conjunto de operaciones que se pueden realizar sobre ellos.

Tipos de estructuras de datos
Vectores (matriz o
arreglo)
Registro
Tipo de datos algebraico
Listas Enlazadas
Listas Simples
Listas Doblemente
Enlazadas
Listas Circulares
Listas por saltos (Skip
lists)
Pilas (stack)
Colas (queue)
Cola de prioridades
rboles
rboles Binarios
rbol binario de
bsqueda
rbol binario de
bsqueda equilibrado
rboles Rojo-Negro
rboles AVL
rboles
Biselados (rboles Splay)
rboles
Multicamino (Multirrama)
rboles B
rboles B+
rboles B*
Conjuntos (set)
Grafos
Tablas Hash
Mapeos
Diccionarios
Montculos (o heaps)
Montculo binario
Montculo binmico
Montculo de Fibonacci
Montculo suave
Montculo 2-3

Qu es un valor?
En informtica, un valor es una secuencia de bits que se interpreta de acuerdo a algn tipo de datos. Una misma secuencia
de bits puede tener distintos valores, dependiendo del tipo usado para interpretar su significado. Por ejemplo un valor
podra ser un tipo de dato entero, de punto flotante o una cadena.
Un valor puede ser virtualmente cualquier clase de dato segn un tipo de dato, una cadena, un dgito, una letra...

Qu son los metadatos?
Literalmente son datos sobre datos. Son datos que describen otros datos. En general, un grupo de metadatos se refiere a
un grupo de datos, llamado recurso. El concepto de metadatos es anlogo al uso de ndices para localizar objetos en vez
de datos. Por ejemplo, en una biblioteca se usan fichas que especifican autores, ttulos, casas editoriales y lugares para
buscar libros. As, los metadatos ayudan a ubicar datos.

I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Unidad 2
Arreglos

Qu es un arreglo?
En programacin, una matriz o vector es una zona de almacenamiento continuo, que contiene una serie de elementos del
mismo tipo, los elementos de la matriz. Desde el punto de vista lgico una matriz se puede ver como un conjunto de
elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones).
En principio, se puede considerar que todas las matrices son de una dimensin, la dimensin principal, pero los elementos
de dicha fila pueden ser a su vez matrices, lo que nos permite hablar de la existencia de matrices multidimensionales,
aunque las ms fciles de imaginar son los de una, dos y tres dimensiones.
Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e
impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sera ms
adecuado utilizar una lista, ya que esta estructura puede cambiar de tamao fcilmente durante la ejecucin de un
programa.



Representacin grfica de un arreglo

Qu es un ndice?
Todo vector se compone de un determinado nmero de elementos. Cada elemento es referenciado por la posicin que
ocupa dentro del vector. Dichas posiciones son llamadas ndice y siempre son correlativos.

Tipos de Arreglos

Arreglos Unidimensionales (Vector[i] )
Un arreglo unidimensional es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos
del mismo tipo. Es la estructura natural para modelar listas de elementos iguales.
El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del
arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada
elemento del arreglo que nos da su posicin relativa.

Arreglos bidimensionales (Matriz[i][j])
Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogneo. El acceso a
ellos tambin es en forma directa por medio de un par de ndices.
Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con filas y columnas. La
primera dimensin del arreglo representa las columnas, cada elemento contiene un valor y cada dimensin representa
una relacin.

Arreglos multidimensionales (n Dimensiones, arregloMD[i][j][k][n] )
Este tambin es un tipo de dato estructurado, que est compuesto por n dimensiones. Para hacer referencia a cada
componente del arreglo es necesario utilizar n ndices, uno para cada dimensin.

Vectores Estticos

int v[5];
int i;
for (i=0 ; i<5 ; i++)
{
v[i] = 2*i;
}
I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez

Matrices
int v[5][ 5];
int i;
for (i=0 ; i<5 ; i++)
for (j=0 ; j<5 ; j++)
{
v[i][ j] = 2*i;
}

Vectores Dinmicos
int *array;
array = (int *) malloc(i*j*sizeof(int));


Bsqueda y clasificacin interna
Encontrar informacin en un arreglo desordenado requiere una bsqueda secuencial comenzando en el primer elemento
y parando cuando se encuentra el elemento buscado o cuando se alcanza el final del arreglo. Este mtodo es el que se
tiene que utilizar con datos desordenados aunque tambin se puede aplicar a datos ordenados. Si los datos ya han sido
ordenados, es ms aconsejable utilizar el algoritmo de bsqueda binaria, que incrementa ampliamente la velocidad de
bsqueda.
Ejemplo de Bsqueda secuencial
BuscaSec (a, n, x)
{
for(i=0; i <n; ++i)
{
if(x==a[i]) return(i);
}
return(-1);
}

Mtodos de ordenamiento
La importancia de mantener nuestros arreglos ordenados radica en que es mucho ms rpido tener acceso a un dato en
un arreglo ordenado que en uno desordenado. Existen muchos algoritmos para la ordenacin de elementos en arreglos.

Seleccin Directa
Este mtodo consiste en seleccionar el elemento ms pequeo de nuestra lista para colocarlo al inicio y as excluirlo de la
lista. Para ahorrar espacio, siempre que vayamos a colocar un elemento en su posicin correcta lo intercambiaremos por
aquel que la est ocupando en ese momento. El algoritmo de seleccin directa es el siguiente:
i <- 1
mientras i<= N haz
min <-i
j <- i + 1
mientras j <= N haz
si arreglo[j] < [min] entonces
min <-j
j <- j + 1
intercambia(arreglo[min],arreglo[i])
i <- i +1


I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Ordenacin por Burbuja
Es el mtodo de ordenacin ms utilizado por su fcil comprensin y programacin, pero es importante sealar que es el
ms ineficiente de todos los mtodos. Este mtodo consiste en llevar los elementos menores a la izquierda del arreglo o
los mayores a la derecha del mismo. La idea bsica del algoritmo es comparar pares de elementos adyacentes e
intercambiarlos entre s hasta que todos se encuentren ordenados.
i <- 1
mientras i < N haz
j <- N
mientras j > i haz
si arreglo[j] < arreglo[j-1] entonces
intercambia(arreglo[j],arreglo[j-1])
j < j - 1
i <- i +1

Mezcla
Este algoritmo consiste en partir el arreglo por la mitad, ordenar la mitad izquierda, ordenar la mitad derecha y mezclar las
dos mitades ordenadas en un array ordenado. Este ltimo paso consiste en ir comparando pares sucesivos de elementos
(uno de cada mitad) y poniendo el valor ms pequeo en el siguiente hueco.
procedimiento mezclar(dat,izqp,izqu,derp,deru)
inicio
izqa <- izqp
dera <- derp
ind <- izqp
mientras (izqa <= izqu) y (dera <= deru) haz
si arreglo[izqa] < dat[dera] entonces
temporal[ind] <- arreglo[izqa]
izqa <- izqa + 1
en caso contrario
temporal[ind] <- arreglo[dera]
dera <- dera + 1
ind <- ind +1
mientras izqa <= izqu haz
temporal[ind] <- arreglo[izqa]
izqa <- izqa + 1
ind <- ind +1
mientras dera <= deru haz
temporal[ind] <=dat[dera]
dera <- dera + 1
ind <- ind + 1
para ind <- izqp hasta deru haz
arreglo[ind] <- temporal[ind]
fin

QuickSort
Consiste en seleccionar un valor v del arreglo, llamado pivote, y rearregla los elementos del arreglo de manera que todos
los elementos menores que v queden colocados antes que v y todos los elementos mayores o iguales que v queden
colocados despus que v.

I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
void quicksort( int A[], int i, int j )
{
if( desde A[i] hasta A[j] existen al menos dos llaves distintas )
{
Seleccionar un pivote, v
Permutar A[i], ...,A[j], tal que, para algn k entre i+1 y j,
A[i], ..., A[k-1] < v y
A[k], . . . , A[j] v
quicksort( A, i, k-1 );
quicksort( A, k, j );
}
}

Bsqueda Secuencial
A este mtodo tambien se le conoce como bsqueda lineal y consiste en empezar al inicio del conjunto de elementos, e ir
atravez de ellos hasta encontrar el elemento indicado hasta llegar al final de arreglo. Este es el mtodo de bsqueda ms
lento, pero si nuestro arreglo se encuentra completamente desordenado es el nico que nos podr ayudar a encontrar el
dato que buscamos.
ind <- 1
encontrado <- falso
mientras no encontrado y ind < N haz
si arreglo[ind] = valor_buscado entonces
encontrado <- verdadero
en caso contrario
ind <- ind +1

Bsqueda Binaria
Las condiciones que debe cumplir el arreglo para poder usar bsqueda binaria son que el arreglo este ordenado y que se
conozca el numero de elementos.
Este mtodo consiste en lo siguiente: comparar el elemento buscado con el elemento situado en la mitad del arreglo, si
tenemos suerte y los dos valores coinciden, en ese momento la bsqueda termina. Pero como existe un alto porcentaje de
que esto no ocurra, repetiremos los pasos anteriores en la mitad inferior del arreglo si el elemento que buscamos resulto
menor que el de la mitad del arreglo, o en la mitad superior si el elemento buscado fue mayor.
La bsqueda termina cuando encontramos el elemento o cuando el tamao del arreglo a examinar sea cero.

encontrado <- falso
primero <- 1
ultimo <- N
mientras primero <= ultimo y no encontrado haz
mitad <- (primero + ultimo)/2
si arreglo[mitad] = valor_buscado entonces
encntrado <- verdadero
en caso contrario
si arreglo[mitad] > valor_buscado entonces
ultimo <- mitad - 1
en caso contrario
primero <- mitad + 1
I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Unidad 3
Apuntadores y Tablas Dinmicas

Listas
La forma ms simple de estructura dinmica es la lista abierta. En esta forma los nodos se organizan de modo que cada
uno apunta al siguiente, y el ltimo no apunta a nada, es decir, el puntero del nodo siguiente vale NULL.
En las listas abiertas existe un nodo especial: el primero. Normalmente diremos que nuestra lista es un puntero a ese
primer nodo y llamaremos a ese nodo la cabeza de la lista. Eso es porque mediante ese nico puntero podemos acceder a
toda la lista.
Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est vaca.
struct nodo {
int dato;
struct nodo *siguiente;
};

Pilas
Una pila es un tipo especial de lista abierta en la que slo se pueden insertar y eliminar nodos en uno de los extremos de
la lista. Estas operaciones se conocen como "push" y "pop", respectivamente "empujar" y "tirar". Adems, las escrituras
de datos siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo ledo.
Estas caractersticas implican un comportamiento de lista LIFO (Last In First Out), el ltimo en entrar es el primero en salir.
El smil del que deriva el nombre de la estructura es una pila de platos. Slo es posible aadir platos en la parte superior de
la pila, y slo pueden tomarse del mismo extremo.
El nodo tpico para construir pilas es el mismo que vimos en el captulo anterior para la construccin de listas:
struct nodo {
int dato;
struct nodo *siguiente;
};

Colas
Una cola es un tipo especial de lista abierta en la que slo se pueden insertar nodos en uno de los extremos de la lista y
slo se pueden eliminar nodos en el otro. Adems, como sucede con las pilas, las escrituras de datos siempre son
inserciones de nodos, y las lecturas siempre eliminan el nodo ledo.
Este tipo de lista es conocido como lista FIFO (First In First Out), el primero en entrar es el primero en salir.
El smil cotidiano es una cola para comprar, por ejemplo, las entradas del cine. Los nuevos compradores slo pueden
colocarse al final de la cola, y slo el primero de la cola puede comprar la entrada.
El nodo tpico para construir pilas es el mismo que vimos en los captulos anteriores para la construccin de listas y pilas:
struct nodo {
int dato;
struct nodo *siguiente;
};


I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Listas Circulares
Una lista circular es una lista lineal en la que el ltimo nodo a punta al primero.
Las listas circulares evitan excepciones en las operaciones que se realicen sobre ellas. No existen casos especiales, cada
nodo siempre tiene uno anterior y uno siguiente.
En algunas listas circulares se aade un nodo especial de cabecera, de ese modo se evita la nica excepcin posible, la de
que la lista est vaca.
El nodo tpico es el mismo que para construir listas abiertas:
struct nodo {
int dato;
struct nodo *siguiente;
};

Listas Doblemente Enlazadas
Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno al nodo siguiente, y otro al
anterior.
Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas, pueden recorrerse en ambos sentidos
a partir de cualquier nodo, esto es porque a partir de cualquier nodo, siempre es posible alcanzar cualquier nodo de la
lista, hasta que se llega a uno de los extremos.
El nodo tpico es el mismo que para construir las listas que hemos visto, salvo que tienen otro puntero al nodo anterior:
struct nodo {
int dato;
struct nodo *siguiente;
struct nodo *anterior;
};


I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Unidad 4
rboles

Conceptos y definiciones
Un rbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos.
Tambin se suele dar una definicin recursiva: un rbol es una estructura en compuesta por un dato y varios rboles.

Elementos
Nodo hijo: cualquiera de los nodos apuntados por uno de los nodos del rbol. En el ejemplo, 'L' y 'M' son hijos de
'G'.
Nodo padre: nodo que contiene un puntero al nodo actual. En el ejemplo, el nodo 'A' es padre de 'B', 'C' y 'D'.
Nodo raz: nodo que no tiene padre. Este es el nodo que usaremos para referirnos al rbol. En el ejemplo, ese
nodo es el 'A'.
Nodo hoja: nodo que no tiene hijos. En el ejemplo hay varios: 'F', 'H', 'I', 'K', 'L', 'M', 'N' y 'O'.
Nodo rama: aunque esta definicin apenas la usaremos, estos son los nodos que no pertenecen a ninguna de las
dos categoras anteriores. En el ejemplo: 'B', 'C', 'D', 'E', 'G' y 'J'.

Propiedades
Orden: es el nmero potencial de hijos que puede tener cada elemento de rbol. De este modo, diremos que un
rbol en el que cada nodo puede apuntar a otros dos es de orden dos, si puede apuntar a tres ser de orden tres,
etc.
Grado: el nmero de hijos que tiene el elemento con ms hijos dentro del rbol. En el rbol del ejemplo, el grado
es tres, ya que tanto 'A' como 'D' tienen tres hijos, y no existen elementos con ms de tres hijos.
Nivel: se define para cada elemento del rbol como la distancia a la raz, medida en nodos. El nivel de la raz es
cero y el de sus hijos uno. As sucesivamente. En el ejemplo, el nodo 'D' tiene nivel 1, el nodo 'G' tiene nivel 2, y el
nodo 'N', nivel 3.
Altura: la altura de un rbol se define como el nivel del nodo de mayor nivel. Como cada nodo de un rbol puede
considerarse a su vez como la raz de un rbol, tambin podemos hablar de altura de ramas. El rbol del ejemplo
tiene altura 3, la rama 'B' tiene altura 2, la rama 'G' tiene altura 1, la 'H' cero, etc.

El nodo tpico de un rbol difiere de los nodos que hemos visto hasta ahora para listas, aunque slo en el nmero de
nodos. Veamos un ejemplo de nodo para crear rboles de orden tres:
struct nodo {
int dato;
struct nodo *rama1;
struct nodo *rama2;
struct nodo *rama3;
};


I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Representacin















Recorridos
Pre-orden
En este tipo de recorrido, el valor del nodo se procesa antes de recorrer las ramas:
void PreOrden(Arbol a) {
if(a == NULL) return;
Procesar(dato);
RecorrerArbol(a->rama[0]);
RecorrerArbol(a->rama[1]);
RecorrerArbol(a->rama[2]);
}
Si seguimos el rbol del ejemplo en pre-orden, y el proceso de los datos es sencillamente mostrarlos por pantalla,
obtendremos algo as:
A B E K F C G L M D H I J N O

In-orden
En este tipo de recorrido, el valor del nodo se procesa despus de recorrer la primera rama y antes de recorrer la ltima.
Esto tiene ms sentido en el caso de rboles binarios, y tambin cuando existen ORDEN-1 datos, en cuyo caso
procesaremos cada dato entre el recorrido de cada dos ramas (este es el caso de los rboles-b):
void InOrden(Arbol a) {
if(a == NULL) return;
RecorrerArbol(a->rama[0]);
Procesar(dato);
RecorrerArbol(a->rama[1]);
RecorrerArbol(a->rama[2]);
}
Si seguimos el rbol del ejemplo en in-orden, y el proceso de los datos es sencillamente mostrarlos por pantalla,
obtendremos algo as:
K E B F A L G M C H D I N J O

I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
Post-Orden
En este tipo de recorrido, el valor del nodo se procesa despus de recorrer todas las ramas:
void PostOrden(Arbol a) {
if(a == NULL) return;
RecorrerArbol(a->rama[0]);
RecorrerArbol(a->rama[1]);
RecorrerArbol(a->rama[2]);
Procesar(dato);
}
Si seguimos el rbol del ejemplo en post-orden, y el proceso de los datos es sencillamente mostrarlos por pantalla,
obtendremos algo as:
K E F B L M G C H I N O J D A


rboles Binarios
Se trata de rboles de orden 2 en los que se cumple que para cada nodo, el valor de la clave de la raz del subrbol
izquierdo es menor que el valor de la clave del nodo y que el valor de la clave raz del subrbol derecho es mayor que el
valor de la clave del nodo.
El repertorio de operaciones que se pueden realizar sobre un ABB es parecido al que realizbamos sobre otras estructuras
de datos, ms alguna otra propia de rboles:
Buscar un elemento.
Insertar un elemento.
Borrar un elemento.

Movimientos a travs del rbol
Nuestra estructura se referenciar siempre mediante un puntero al nodo Raiz, este puntero no debe perderse nunca.
Para movernos a travs del rbol usaremos punteros auxiliares, de modo que desde cualquier puntero los movimientos
posibles sern:
Moverse al nodo raz de la rama izquierda
Moverse al nodo raz de la rama derecha
Moverse al nodo Raiz del rbol.

Informacin:
Comprobar si un rbol est vaco.
Calcular el nmero de nodos.
Comprobar si el nodo es hoja.
Calcular la altura de un nodo.
Calcular la altura de un rbol.

Declaracin de rbol Binario en C++
class ArbolABB {
private:
//// Clase local de Lista para Nodo de ArbolBinario:
class Nodo {
public:
// Constructor:
Nodo(const int dat, Nodo *izq=NULL, Nodo *der=NULL) :
I n s t i t u t o C a m b r i d g e d e Q u e r t a r o
c o m i e n z a c o n x i t o t u f u t u r o

Estructura de Datos Gua Examen Extraordinario 2011 L.I. Adrin Gallegos Hernndez
dato(dat), izquierdo(izq), derecho(der) {}
// Miembros:
int dato;
Nodo *izquierdo;
Nodo *derecho;
};
// Punteros de la lista, para cabeza y nodo actual:
Nodo *raz;
Nodo *actual;
int contador;
int altura;
public:
// Constructor y destructor bsicos:
ArbolABB() : raz(NULL), actual(NULL) {}
~ArbolABB() { Podar(raz); }
// Insertar en rbol ordenado:
void Insertar(const int dat);
// Borrar un elemento del rbol:
void Borrar(const int dat);
// Funcin de bsqueda:
bool Buscar(const int dat);
// Comprobar si el rbol est vaco:
bool Vacio(Nodo *r) { return r==NULL; }
// Comprobar si es un nodo hoja:
bool EsHoja(Nodo *r) { return !r->derecho && !r->izquierdo; }
// Contar nmero de nodos:
const int NumeroNodos();
const int AlturaArbol();
// Calcular altura de un int:
int Altura(const int dat);
// Devolver referencia al int del nodo actual:
int &ValorActual() { return actual->dato; }
// Moverse al nodo raz:
void Raiz() { actual = raz; }
// Aplicar una funcin a cada elemento del rbol:
void InOrden(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);
void PreOrden(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);
void PostOrden(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);
private:
// Funciones auxiliares
void Podar(Nodo* &);
void auxContador(Nodo*);
void auxAltura(Nodo*, int);
};

You might also like