Universidad de Costa Rica
|
|
Para esta tarea programada usted debe enviarme estos archivos:
Para resolver esta tarea ustede debe usar como base la clase lista vista en el curso obtener estas 3 clases. Primero escriba un método que tome los nodos de la lista y los reacomode para formar un árbol binario ordenado, en el que se cumpla siempre que en cada nodo los valores a la izquierda son menores o iguales al nodo y los de la derecha mayores o iguales. Una vez que haya reacomodado los nodos de la lista para que formen un árbol binario, recórrale en inorden para obtener la lista ordenada. Note que nunca hace falta copie o elimine valores, pues todo el trabajo se hace cambiando los enlaces entre nodos. Si lo desea, use recursividad.
http://www.di-mare.com/adolfo/p/Rep.htm
private void list2tree() { // this es la lista a la que le sacamos los nodos List miArbol = new List(); // este es el árbol binario de nodos if ( !miArbol.empty() } { /* siempre nace vacío */ } while ( ! this.empty() ) { // quedan nodos Node elSacado = this.sacaNodo(); // saca el primer nodo miArbol.insertNode( elSacado ); // http://google.com/search?as_qdr=all&&num=100&&as_q=java+binary+insert+tree } if ( this.empty() } { /* IMPOSIBLE */ } // Ahora hay que sacar en orden los nodos de miArbol // Cada nodo sacado debe se agregado al fina de this // - http://google.com/search?as_qdr=all&&num=100&&as_q=java+binary+delete+tree // - Node otroSacado = miArbol.deleteNode( elSacado ); // - deleteNode() es la parte más dura de la tarea }
inOrder()
[IPD] para quitarle los nodos en orden ascendente. Cada uno de esos nodos debe ser agregado al final de la lista, de manera que la lista (this)
queda totalmente ordenada.
http://google.com/search?as_qdr=all&&num=100&&as_q=java+inOrder+tree
List.add()
el valor del nodo? De lo contrario la lógica del programa requiere que uno tenga acceso al nodo padre, pero en el el nodo solo hay referencia a los hijos y no al padre.
deleteNode()
la referencia al hijo derecho del nodo que queda, si lo hubiera, o (null)
si no existe el hijo derecho. De esta forma, al retornar a la invocación recursiva del padre, ese mismo padre tendrá la referencia que necesita para primero borrarse y luego terminar el recorrido IPD de sus descendientes derechos.List.add()
para agregar el valor del nodo al final de la lista, sin eliminar el árbol, aunque es menos eficiente.Entregue su tarea por correo electrónico, como lo hizo anteriormente.
Tiempo de entrega: | 7 días |
Modalidad: | En Parejas |
Adolfo Di Mare <adolfo@di-mare.com>.
|