Arboles, Inorden Y Conteo De Nodos En C++
Actividad:
* Realizar el programa y corrida de el Recorrido de un arbol, por Entre-Orden.
Algoritmo:
EntreOrden(nodo)
si nodo = nulo entonces retornaEntreOrden(nodo.izquierda)
imprime nodo.valor
EntreOrden (nodo.derecha)
Programa:
#include <iostream>
using namespace std;
class ArbolABB {
private:
class Nodo {
public:Nodo(const int dat, Nodo *izq=NULL, Nodo *der=NULL) :
dato(dat), izquierdo(izq), derecho(der) {}
int dato;
Nodo *izquierdo;
Nodo *derecho;
};
Nodo*raiz;
Nodo *actual;
public:
ArbolABB() : raiz(NULL), actual(NULL) {}
~ArbolABB() { Podar(raiz); }
void Insertar(const int dat);
bool Vacio(Nodo *r) { return r==NULL; }bool EsHoja(Nodo *r) { return !r->derecho && !r->izquierdo; }
void Raiz() { actual = raiz; }
void EntreOrden(void (*func)(int&) , Nodo *nodo=NULL, bool r=true);private:
void Podar(Nodo* &);
};
void ArbolABB::Insertar(const int dat)
{
Nodo *padre = NULL;
actual = raiz;
while(!Vacio(actual) && dat != actual->dato) {padre = actual;
if(dat > actual->dato) actual = actual->derecho;
else if(dat < actual->dato) actual = actual->izquierdo;
}
if(!Vacio(actual)) return;if(Vacio(padre)) raiz = new Nodo(dat);
else if(dat < padre->dato) padre->izquierdo = new Nodo(dat);
else if(dat > padre->dato) padre->derecho = new Nodo(dat);
}void ArbolABB::EntreOrden(void (*func)(int&) , Nodo *nodo, bool r)
{
if(r) nodo = raiz;
if(nodo->izquierdo) EntreOrden(func, nodo->izquierdo, false);
func(nodo->dato);if(nodo->derecho) EntreOrden(func, nodo->derecho, false);
}
void ArbolABB::Podar(Nodo* &nodo)
{
if(nodo) {
Podar(nodo->izquierdo);
Podar(nodo->derecho);...
Regístrate para leer el documento completo.