<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Hola, leo su pagina y me ayudo de ella, muy interesante, pero necesito ayuda con un programa, espero contar con su ayuda a la brevedad posible si no es molestia, se trata de un programa de arboles binarios que marca errores, que no he encontrado solucion. Por su atencion gracias<BR>
 <BR>
#include <iostream.h><BR>#include <conio.h><BR>
class Nodo<BR>{<BR>private:<BR> Nodo *izquierdo;<BR> int dato;<BR> Nodo *derecho;<BR>public:<BR> Nodo(int dat, Nodo *izq=NULL, Nodo *der=NULL): dato (dat), izquierdo(izq), derecho(der){}<BR> friend class Arbol;<BR>};<BR>
typedef Nodo*pNodo;<BR>
class Arbol<BR>{<BR>private:<BR> pNodo raiz;<BR> pNodo actual;<BR> int contador;<BR> int altura;<BR> void Insertar (int, pNodo&);<BR> void Podar (pNodo&);<BR> void auxContador (pNodo);<BR> void auxAltura (pNodo, int);<BR> void In (pNodo);<BR> void Pre (pNodo);<BR> void Post (pNodo);<BR> pNodo Buscar (int, pNodo, int&);<BR> pNodo Busdersubizq (pNodo);<BR> pNodo Busizqsubder (pNodo);<BR> pNodo Padre (pNodo, pNodo);<BR> void Alt (int, pNodo, int&);<BR>public:<BR> Arbol():raiz(NULL), actual(NULL){}<BR> ~Arbol(){Podar(raiz);}<BR> void Insertar (int dat){Insertar(dat, raiz);}<BR> void Raiz(){actual=raiz;}<BR> void InOrden(){Raiz(); In(actual);}<BR> void PreOrden(){Raiz(); Pre(actual);}<BR> void PostOrden(){Raiz(); Post(actual);}<BR> void Borrar (int);<BR> pNodo Vacio (pNodo r){return r=NULL;}<BR> int EsHoja (pNodo r){return !r->derecho&&!r->izquierdo;}<BR> int NumeroNodos ();<BR> int AlturaArbol ();<BR> int Altura (int);<BR> int &ValorActual(){return actual->dato;}<BR>};<BR>
void Arbol::Insertar (int dat, pNodo &raiz)<BR>{<BR>pNodo a=raiz;<BR>if(a==NULL)<BR> raiz=new Nodo(dat);<BR>else<BR> if(dat<=a->dato)<BR>  Insertar(dat, a->izquierdo);<BR>else<BR> Insertar(dat,a->derecho);<BR>}<BR>
void Arbol::In(pNodo actual)<BR>{<BR>if(actual!=NULL)<BR>{<BR> In(actual->izquierdo);<BR> cout<<actual->dato;<BR> In(actual->derecho);<BR>}<BR>}<BR>
void Arbol::Pre(pNodo actual)<BR>{<BR>if(actual!=NULL)<BR>{<BR> cout<<actual->dato;<BR> Pre(actual->izquierdo);<BR> Pre(actual->derecho);<BR>}<BR>}<BR>
void Arbol::Post(pNodo actual)<BR>{<BR>if(actual!=NULL)<BR>{<BR> Post(actual->izquierdo);<BR> Post(actual->derecho);<BR> cout<<actual->dato;<BR>}<BR>}<BR>
void Arbol::Podar(pNodo &nodo)<BR>{<BR>if(nodo)<BR>{<BR> Podar(nodo->izquierdo);<BR> Podar(nodo->derecho);<BR> delete nodo;<BR> nodo=NULL;<BR>}<BR>}<BR>
void Arbol::auxContador (pNodo nodo)<BR>{<BR>contador ++;<BR>if(nodo->izquierdo)<BR> auxContador(nodo->izquierdo);<BR>if(nodo->derecho)<BR> auxContador(nodo->derecho);<BR>}<BR>
int Arbol::NumeroNodos()<BR>{<BR>contador=0;<BR>auxContador(raiz);<BR>return contador;<BR>}<BR>
void Arbol::auxAltura(pNodo nodo, int a)<BR>{<BR>if(nodo->izquierdo)<BR> auxAltura(nodo->izquierdo, a++);<BR>if(nodo->derecho)<BR> auxAltura(nodo->derecho, a++);<BR>if(EsHoja(nodo)&&a>altura)<BR> altura=a;<BR>}<BR>
int Arbol::AlturaArbol ()<BR>{<BR>altura=0;<BR>auxAltura(raiz, 0);<BR>return altura;<BR>}<BR>
pNodo Arbol::Buscar(int dat, pNodo actual, int &ban)<BR>{<BR>static pNodo nodo=NULL;<BR>if(!Vacio(actual))<BR>{<BR> if(dat>actual->dato)<BR>  Buscar(dat, actual->derecho, ban);<BR> else<BR>  if(dat<actual->dato)<BR>   Buscar(dat, actual->izquierdo, ban);<BR> else<BR>  if(dat==actual->dato)<BR>  {<BR>   nodo=actual;<BR>   ban=1;<BR>  }<BR>}<BR>return nodo;<BR>}<BR>
void Arbol::Alt(int dat, pNodo actual, int &altura)<BR>{<BR>if(actual)<BR> if(dat!=actual->dato)<BR> {<BR>  altura ++;<BR>  if(dat>actual->dato)<BR>   Alt(dat, actual->derecho, altura);<BR>  else<BR>   Alt(dat, actual->izquierdo, altura);<BR> }<BR>}<BR>
int Arbol::Altura(int dat)<BR>{<BR>int altura=-1;<BR>actual=raiz;<BR>pNodo nodo=Buscar(dat, actual, ban);<BR>//nodo=Buscar(dat, actual, altura);<BR>if(altura==1)<BR>{<BR> altura=0;<BR> Alt(dat, actual, altura);<BR>}<BR>return altura;<BR>}<BR>
pNodo Arbol::Padre(pNodo actual, pNodo nodo)<BR>{<BR>static pNodo aux=NULL;<BR>if(actual!=NULL)<BR>{<BR> if(nodo==actual->derecho||nodo==actual->izquierdo)<BR>  aux=actual;<BR> else<BR>  if(nodo->dato<actual->dato)<BR>   Padre(actual->izquierdo, nodo);<BR>  else<BR>   if(nodo->dato>actual->dato)<BR>    Padre(actual->derecho, nodo);<BR>}<BR>return aux;<BR>}<BR>
pNodo Arbol::Busdersubizq(pNodo  actual)<BR>{<BR>static pNodo  nodo=NULL;<BR>if(actual->derecho)<BR> Busdersubizq(actual->derecho);<BR>else<BR> nodo=actual;<BR>return nodo;<BR>}<BR>
pNodo Arbol::Busizqsubder (pNodo  actual)<BR>{<BR>static pNodo nodo=NULL;<BR>if(actual->izquierdo)<BR> Busizqsubder(actual->izquierdo);<BR>else<BR> nodo=actual;<BR>return nodo;<BR>}<BR>
void Arbol::Borrar (int dat)<BR>{<BR>pNodo padre=NULL;<BR>pNodo bnodo, idnodo;<BR>Raiz();<BR>int ban=0;<BR>bnodo=Buscar(dat, actual, ban);<BR>if(ban)<BR>{<BR> if(EsHoja(bnodo))<BR> {<BR>  padre=Padre(actual, bnodo);<BR>  if(padre->derecho==bnodo)<BR>   padre->derecho=NULL;<BR>  else<BR>   padre->izquierdo=NULL;<BR> delete bnodo;<BR> }<BR> else<BR>  if(bnodo->izquierdo)<BR>  {<BR>   idnodo=Busdersubizq(bnodo->izquierdo);<BR>   if(EsHoja(idnodo))<BR>   {<BR>    padre=Padre(actual, idnodo);<BR>    if(padre->derecho==idnodo)<BR>     padre->derecho=NULL;<BR>    else<BR>     padre->izquierdo=NULL;<BR>   }<BR>   else<BR>    bnodo->izquierdo=idnodo->izquierdo;<BR>  bnodo->dato=idnodo->dato;<BR>  delete idnodo;<BR>  }<BR>  else<BR>  {<BR>   idnodo=Busizqsubder(bnodo->derecho);<BR>   if(EsHoja(idnodo))<BR>   {<BR>    padre=Padre(actual, idnodo);<BR>    if(padre->izquierdo==idnodo)<BR>     padre->izquierdo=NULL;<BR>    else<BR>     padre->derecho=NULL;<BR>   }<BR>   else<BR>    bnodo->derecho=idnodo->derecho;<BR>  bnodo->dato=idnodo->dato;<BR>  delete idnodo;<BR>  }<BR> }<BR>else<BR> cout<<"El "<<dat<<" no existe";<BR>}<BR>void Mostrar()<BR>{<BR>   int d;<BR>   cout << d << ",";<BR>}<BR>
int main()<BR>{<BR>   // Un árbol de enteros<BR>   Arbol ArbolInt;<BR>
   // Inserción de nodos en árbol:<BR>   ArbolInt.Insertar(10);<BR>   ArbolInt.Insertar(5);<BR>   ArbolInt.Insertar(12);<BR>   ArbolInt.Insertar(4);<BR>   ArbolInt.Insertar(7);<BR>   ArbolInt.Insertar(3);<BR>   ArbolInt.Insertar(6);<BR>   ArbolInt.Insertar(9);<BR>   ArbolInt.Insertar(8);<BR>   ArbolInt.Insertar(11);<BR>   ArbolInt.Insertar(14);<BR>   ArbolInt.Insertar(13);<BR>   ArbolInt.Insertar(2);<BR>   ArbolInt.Insertar(1);<BR>   ArbolInt.Insertar(15);<BR>   ArbolInt.Insertar(10);<BR>   ArbolInt.Insertar(17);<BR>   ArbolInt.Insertar(18);<BR>   ArbolInt.Insertar(16);<BR>
   cout << "Altura de arbol " << ArbolInt.AlturaArbol() << endl;<BR>
   // Mostrar el árbol en tres ordenes distintos:<BR>   cout << "InOrden: ";<BR>   ArbolInt.InOrden(Mostrar);<BR>   cout << endl;<BR>   cout << "PreOrden: ";<BR>   ArbolInt.PreOrden(Mostrar);<BR>   cout << endl;<BR>   cout << "PostOrden: ";<BR>   ArbolInt.PostOrden(Mostrar);<BR>   cout << endl;<BR>
   // Borraremos algunos elementos:<BR>   cout << "N nodos: " << ArbolInt.NumeroNodos() << endl;<BR>   ArbolInt.Borrar(5);<BR>   cout << "Borrar   5: ";<BR>   ArbolInt.InOrden(Mostrar);<BR>   cout << endl;<BR>   ArbolInt.Borrar(8);<BR>   cout << "Borrar   8: ";<BR>   ArbolInt.InOrden(Mostrar);<BR>   cout << endl;<BR>   ArbolInt.Borrar(15);<BR>   cout << "Borrar  15: ";<BR>   ArbolInt.InOrden(Mostrar);<BR>   cout << endl;<BR>   ArbolInt.Borrar(4);<BR>   cout << "Borrar   4: ";<BR>   ArbolInt.InOrden(Mostrar);<BR>   ArbolInt.Borrar(17);<BR>   cout << endl;<BR>   cout << "Borrar  17: ";<BR>   ArbolInt.InOrden(Mostrar);<BR>   cout << endl;<BR>
   // Veamos algunos parámetros<BR>   cout << "N nodos: " << ArbolInt.NumeroNodos() << endl;<BR>   cout << "Altura de 1 " << ArbolInt.Altura(1) << endl;<BR>   cout << "Altura de 10 " << ArbolInt.Altura(10) << endl;<BR>   cout << "Altura de arbol " << ArbolInt.AlturaArbol() << endl;<BR>
   cin.get();<BR>   return 0;<BR>}<BR><BR><br /><hr />Conoce el reto de esta semana y  <a href='http://www.actualizatuperfil.com.mx/' target='_new'>y gana con Perfil de Windows Live</a></body>
</html>