<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=text/html;charset=iso-8859-1 http-equiv=Content-Type>
<STYLE>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</STYLE>

<META name=GENERATOR content="MSHTML 8.00.6001.18702"></HEAD>
<BODY style="PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 15px" 
id=MailContainerBody class=hmmessage leftMargin=0 topMargin=0 
CanvasTabStop="true" name="Compose message area">
<DIV><FONT face=Arial>Mauricio, fijate porque los errores son bastante sencillos 
de corregir </FONT></DIV>
<DIV><FONT face=Arial></FONT> </DIV>
<DIV><FONT face=Arial>ArbolInt.InOrden(Mostrar); // Se llama sin argumentos y 
vos le pusiste Mostrar</FONT></DIV>
<DIV><FONT face=Arial>ArbolInt.InOrden();  // Seria lo correcto asi igual 
con PreOrden(), PosOrden()</FONT></DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial></FONT> </DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial>y en Altura no declaraste ban yo 
aca lo declare y lo inicalice con 0 arreglalo a tu gusto.</FONT></DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial></FONT> </DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial>int Arbol::Altura(int 
dat)<BR>{<BR>int altura=-1;<BR>actual=raiz;<BR>int ban=0; // LINEA AGREGADA POR 
MI<BR></FONT><FONT face=Arial>pNodo nodo=Buscar(dat, actual, 
ban);<BR>...</FONT></DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial>}</FONT></DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial></FONT> </DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial>Arreglado es 
funciona.</FONT></DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial>Espero que te 
sirva.</FONT></DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial></FONT> </DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial>Saludos</FONT></DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial></FONT> </DIV>
<DIV style="FONT: 10pt Tahoma"><FONT face=Arial>Silvio</FONT></DIV>
<DIV style="FONT: 10pt Tahoma">
<DIV><BR></DIV>
<DIV style="BACKGROUND: #f5f5f5">
<DIV style="font-color: black"><B>From:</B> <A title=maufem@live.com.mx 
href="mailto:maufem@live.com.mx">Mauricio Flores</A> </DIV>
<DIV><B>Sent:</B> Sunday, June 07, 2009 1:24 AM</DIV>
<DIV><B>To:</B> <A title=cconclase@listas.conclase.net 
href="mailto:cconclase@listas.conclase.net">cconclase@listas.conclase.net</A> 
</DIV>
<DIV><B>Subject:</B> [C con Clase] Ayuda</DIV></DIV></DIV>
<DIV><BR></DIV>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> 
<P>
<HR>

<P></P>_______________________________________________<BR>Lista de correo 
Cconclase 
Cconclase@listas.conclase.net<BR>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<BR>Bajas: 
http://listas.conclase.net/index.php?gid=2&mnu=FAQ</BODY></HTML>