| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
yeni
Registrado: 04 Nov 2011 Mensajes: 1
| Publicado: 04/11/2011 1:28 pm | | | Título: imquietud |
| 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();
} } }
[b]class ArbolBin[/b] { 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; }
} |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |