<!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>