imquietud

Dudas y comentarios sobre otros lenguajes de programación. Si algún lenguaje recibe suficientes preguntas le añadimos nueva categoría.
Responder
Mensaje
Autor
yeni
Mensajes: 1
Registrado: 04/11/2011 1:17 pm

imquietud

#1 Mensaje por yeni » 04/11/2011 1:28 pm

tengo este programa creado en c# en la cual cree la clase cuenta,nodo,arbolbin...y bueno ahora la pregunta es:
* hallar la altura del arbol
*Imprimir el árbol por niveles: desde arriba hacia abajo y de izquierda a derecha


y estas dos preguntas no se como resolverlas no se como empezar espero me puedan colaborar



namespace Arboles
{
class Program
{
static void Main(string[] args)
{
//Se crea un arbol
ArbolBin miarbol=new ArbolBin();

//Se crea una cuenta que va a ser insertada en el arbol

Cuenta cuenta1 = new Cuenta(20, 1000, "Juan");
miarbol.insertar(cuenta1);

Cuenta cuenta2 = new Cuenta(10, 2000, "Luis");
miarbol.insertar(cuenta2);

Cuenta cuenta3 = new Cuenta(30, 5000, "Carlos");
miarbol.insertar(cuenta3);

//Se ha creado un arbol con raiz 20,
//hijo izquierdo 10 e hijo derecho 30

//Ahora comprobemos con los recorridos:
Console.WriteLine("Inorden: \n");
//cout<<endl<<"Inorden: ";
miarbol.inorden(miarbol.raiz);
//Imprimir 10 20 30

Console.WriteLine("Preorden: \n");
//cout<<endl<<"Preorden: ";
miarbol.preorden(miarbol.raiz);
//Imprimir 20 10 30

Console.WriteLine("Posorden: \n");
//cout<<endl<<"Posorden: ";
miarbol.posorden(miarbol.raiz);
//Imprimir 10 30 20

Nodo mipadre;
mipadre = miarbol.buscarPadre(20);
if (mipadre == null) Console.WriteLine("Dato no hallado o es la raiz del arbol");
else
Console.WriteLine((mipadre.dato).Codigo);

mipadre = miarbol.buscarPadre(10);
if (mipadre == null) Console.WriteLine("Dato no hallado o es la raiz del arbol");
else
Console.WriteLine((mipadre.dato).Codigo);

mipadre = miarbol.buscarPadre(30);
if (mipadre == null) Console.WriteLine("Dato no hallado o es la raiz del arbol");
else
Console.WriteLine((mipadre.dato).Codigo);


//Para parar el programa
Console.ReadLine();

}
}
}





class ArbolBin
{
public Nodo raiz; //Apunta a la raíz del arbol
public Nodo actual;

public ArbolBin() //Constructor
{
raiz = null;
actual = null;
}

public void insertar(Cuenta dato)
{
if (raiz == null) //Si árbol vacío
{
raiz = new Nodo(dato); //Crea el nodo
actual = raiz; //El nuevo a su vez es el actual
}
else //Arbol no vacío
buscar_lugar(raiz, dato);
}

private void buscar_lugar(Nodo r, Cuenta dato)
{
if (r!=null) //Si puntero no nulo
{
if ((r.dato).Codigo > dato.Codigo) // Si clave del nuevo es menor
// que la clave de r
{
if (r.hijoIzq==null) // Si r no tiene hijo izq
{
r.hijoIzq = new Nodo(dato); //Lo crea e inserta
actual = r.hijoIzq;
}
else
buscar_lugar(r.hijoIzq, dato); //Sigue buscando
}
else if ((r.dato).Codigo < dato.Codigo) // Si clave del nuevo es
// mayor que la clave de r
{
if (r.hijoDer==null) // Si no tiene hijo der
{
r.hijoDer = new Nodo(dato); //Lo crea e inserta
actual = r.hijoDer;
}
else
buscar_lugar(r.hijoDer, dato); //Sigue buscando
}
}
else
{
Console.WriteLine("¡Error! referencia a nodo invalida");
}


}

//Recorridos:
public void inorden(Nodo r)
{
if (r != null) //Si es no nulo
{
inorden(r.hijoIzq);
Console.WriteLine(" ");
Console.WriteLine((r.dato).Codigo);
Console.WriteLine(" ");
inorden(r.hijoDer);
}

}
public void preorden(Nodo r)
{

if (r != null) //Si es no nulo
{
Console.WriteLine(" ");
Console.WriteLine((r.dato).Codigo);
Console.WriteLine(" ");
preorden(r.hijoIzq);
preorden(r.hijoDer);
}

}
public void posorden(Nodo r)
{
if (r != null) //Si es no nulo
{
posorden(r.hijoIzq);
posorden(r.hijoDer);
Console.WriteLine(" ");
Console.WriteLine((r.dato).Codigo);
Console.WriteLine(" ");
}

}

public Nodo buscarPadre(int clave)
{
if (raiz==null)
return null; //Si árbol vacío
if (clave == raiz.dato.Codigo) //Si el buscado es la raíz
{
Console.WriteLine("El dato no tiene padre ya que es la raíz");
return null;
}
else //Búsqueda del padre
return padre(raiz, clave);
}

Nodo padre(Nodo r, int key)
{
if ((r.hijoIzq!=null) && (key < r.dato.Codigo))
/* Si tiene hijo izquierdo no nulo y la clave del
buscado es menor que la clave de r */
{
if ((r.hijoIzq).dato.Codigo == key)
/*Si el hijo de la izquierda es el buscado
entonces r es el padre */
return r;
else
return padre(r.hijoIzq, key); //Seguir buscando…
}
else if ((r.hijoDer!=null) && (key > r.dato.Codigo))
/*Si tiene hijo derecho no nulo y la clave del
buscado es mayor que la clave de r */
{
if ((r.hijoDer).dato.Codigo == key)
/* Si el hijo de la derecha es el buscado
entonces r es el padre */
return r;
else
return padre(r.hijoDer, key);
}
Console.WriteLine("Hijo no encontrado");//En caso de no encontrarlo
return null;
}




}
}






class Cuenta
{
private int codigo;

public int Codigo
{
get { return codigo; }
}

string nombreCliente;

float saldo;

public Cuenta()
{
codigo = 0;
saldo = 0;
nombreCliente = string.Empty;
}


public Cuenta(int codi, float saldoInic, string nomcliente)
{
codigo = codi;
saldo = saldoInic;
nombreCliente = nomcliente;
}
}
}



class Nodo
{
public Cuenta dato;
public Nodo hijoIzq; //Apuntador a hijo izquierdo
public Nodo hijoDer; //Apuntador a hijo derecho

public Nodo(Cuenta nDato) //Constructor
{
dato = nDato;
hijoDer = null;
hijoIzq = null;
}

}

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado