Ver Mensaje Individual
  #9 (permalink)  
Antiguo 22/11/2014, 13:46
Avatar de Profesor_Falken
Profesor_Falken
 
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 9 meses
Puntos: 182
Respuesta: Duda al definir un árbol n-ario

Buenas,

Estás mezclando programación estructurada con programación orientada a objetos.

Cita:
1)hijos.add(nodo); no le faltaría indicar donde lo estás metiendo, a que hijo se lo asigna? en que nivel?
No tengo que indicárselo. Estoy añadiendo un hijo al propio nodo.

Cita:
2)nodo.padre=this; a "this" le faltaría algo no?, estás igualando el padre al nodo?
Cuando a un nodo le añado un hijo, este nodo es padre de dicho hijo.

Te pongo la clase nodo tal y como la veo yo:

Código Java:
Ver original
  1. public class nodoN {
  2.  
  3.     private int valor;
  4.     private List <nodoN> hijos = new ArrayList <nodoN>();
  5.     private nodoN padre;
  6.  
  7.     public void nodoN(){
  8.         nodoN(0);
  9.     }
  10.  
  11.     public void nodoN(int v){
  12.         valor = v;
  13.     }
  14.  
  15.     public boolean isRaiz (){
  16.         return this.padre == null;
  17.     }
  18.  
  19.     public void agregarHijo(nodoN nodo) {
  20.         hijos.add(nodo);
  21.         nodo.padre=this;
  22.     }
  23.  
  24.     public List<NodoN> getHijos() {
  25.         return hijos;
  26.     }
  27.  
  28.    public int getValue() {
  29.        return value;
  30.    }
  31. }


Para utilizarlo y hacer una estructura como esta:
raiz
--Nodo1
----Nodo3
--Nodo2
---Nodo4
---Nodo5
-----Nodo6


Código Java:
Ver original
  1. //Definimos nodos
  2. NodoN raiz = new nodoN(0);
  3. NodoN nodo1 = new Nodo(1);
  4. NodoN nodo2 = new Nodo(2);
  5. NodoN nodo3 = new Nodo(3);
  6. NodoN nodo4 = new Nodo(4);
  7. NodoN nodo5 = new Nodo(5);
  8. NodoN nodo6 = new Nodo(6);
  9.  
  10. //Creamos la estructura de arbol
  11. raiz.agregarHijo(nodo1);
  12. raiz.agregarHijo(nodo2);
  13. nodo1.agregarHijo(nodo3);
  14. nodo2.agregarHijo(nodo4);
  15. nodo2.agregarHijo(nodo5);
  16. nodo5.agregarHijo(nodo6);

Para recorrer la estructura lo perfecto sería que implementases el patrón iterator en la clase nodo (http://www.tutorialspoint.com/design...or_pattern.htm).
Te pongo un ejemplo de recorrido recursivo del árbol pintando en consola:

Código Java:
Ver original
  1. public void recorrerArbol(nodoN nodoRaiz) {
  2.    if (nodoRaiz.getHijos() == null) {
  3.         System.out.println("Value=" + nodoRaiz.getValue();        
  4.    }
  5.    for (final nNodoN nodo : nodoRaiz.getHijos()) {
  6.        recorrerArbol(nodo);
  7.    }
  8. }
  9. [....]
  10. recorrerArbol(raiz);

Nota: lo he escrito directamente sobre el post, por lo que puede que me haya equivocado en alguna letra y/o símbolo en el código. Sin embargo espero que sirva al menos la idea.


Un saludo
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 23/11/2014 a las 13:58