<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Buenas,<br><br>ante todo decirte que esta es una lista en la que ayudamos a revolser problemas, y no nos expones tu problema. Nos dices que es un programa de arboles binarios que marca errores...no ayudas mucho con tu error, danos más información y así será más fácil ayudarte. Podría compilar el código y ponerme a revisar yo mismo, pero entonces estaría haciendote el trabajo y no es lo que se persigue en esta lista.<br><br>Un saludo y espero la exposición del problema bien explicada.<br><br><hr id="stopSpelling">From: maufem@live.com.mx<br>To: cconclase@listas.conclase.net<br>Date: Sat, 6 Jun 2009 23:24:18 -0500<br>Subject: [C con Clase] Ayuda<br><br>



<style>
.ExternalClass .EC_hmmessage P
{padding:0px;}
.ExternalClass body.EC_hmmessage
{font-size:10pt;font-family:Verdana;}
</style>


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/">y gana con Perfil de Windows Live</a><br /><hr />Nuevo Windows Live, un mundo lleno de posibilidades <a href='http://www.microsoft.com/windows/windowslive/default.aspx' target='_new'>Descúbrelo.</a></body>
</html>