Árbol Binario – recorrido InOrden
/*
Cargar un Nodo con tipo de dato genérico en el campo información
de forma iterativa.
Luego, mostrar el recorrido por el árbol y hacer uno de los recorridos
Naturales o Inversos.
*/
#include <iostream>
#include <string.h>
using namespace std;
// PILAs
template <typename T>
struct NodoPila
{
T info;
NodoPila<T> *sgte;
};
template <typename T>
void push(NodoPila<T> *&pila, T x)
{
NodoPila<T> *p = new NodoPila<T>();
p->info = x;
p->sgte = pila;
pila = p;
}
template <typename T>
T pop(NodoPila<T> *&pila)
{
NodoPila<T> *p = pila;
T x = p->info;
pila = p->sgte;
delete (p);
return x;
}
// ARBOL
template <typename T>
struct Nodo
{
T info;
Nodo<T> *izq;
Nodo<T> *der;
};
AyED – K1026
template <typename T> Nodo<T> *insertar(Nodo<T> *&raiz, T x)
{
Nodo<T> *p = raiz;
Nodo<T> *nuevo = new Nodo<T>();
nuevo->info = x;
nuevo->izq = NULL;
nuevo->der = NULL;
if (raiz == NULL)
{
raiz = nuevo;
return nuevo;
}
while (1)
{
if (x == p->info)
{
delete(nuevo);
return p;
}
if (x < p->info)
{
if (p->izq == NULL)
{
p->izq = nuevo;
break;
}
else
p = p->izq;
}
if (x > p->info)
{
if (p->der == NULL)
{
p->der = nuevo;
break;
}
else
p = p->der;
}
}
return nuevo;
}
AyED – K1026
template <typename T> void recorrerInOrden(Nodo<T> *raiz)
{
NodoPila<Nodo<T> *> *pila = NULL;
Nodo<T> *p = raiz;
while (p || pila)
{
while (p)
{
push(pila, p);
p = p->izq;
}
p = pop(pila);
cout << p->info << " ";
p = p->der;
}
}
#define TIPODATO int
int main()
{
Nodo<TIPODATO> *raiz = NULL; // inicializamos el árbol.
TIPODATO v[10] = {5,7,8,4,1,2,3,6,9,9};
for (int i=0; i<10; i++) {
insertar(raiz, v[i]);
}
cout << "InOrden: ";
recorrerInOrden(raiz);
return 0;
}
AyED – K1026