搜索N-ary树并返回Node

时间:2015-11-19 22:42:49

标签: java tree

我需要找到一个给定的节点,然后返回它,如果它找不到它,则返回null。

我试过这个,但它返回null:

public NodoN<T> buscarNodo(T dato, NodoN<T> nodo){
        if(nodo != null) {
            // Root is dummy and is null
            if (nodo.dato != null && nodo.dato.equals(dato)){
               return nodo;
            } else {
                int cantHijos = nodo.nodos.size();
                ArrayList<NodoN<T>> nodosHijos = nodo.nodos;
                NodoN<T> nodoEncontrado;
                for (int i = 0; i < cantHijos; i++) {
                    nodoEncontrado = buscarNodo(dato, nodosHijos.get(i));
                    if(nodoEncontrado.dato.equals(dato)){
                       return nodo;
                    }
                }
             }
        }
        return null;
}

在查看调试器时,它正确找到了我想要的那个,但后来继续循环并返回null。

NodoN班:

import java.util.ArrayList;

public class NodoN<T> {
    T dato;
    Integer tMax;
    ArrayList<NodoN<T>> nodos;

    public NodoN(T dato, Integer tMax){
        this.dato = dato;
        this.tMax = tMax;
        nodos = new ArrayList<NodoN<T>>();
    }

    public void agregar(NodoN<T> nodo){
        if (nodos.size()<tMax){
            nodos.add(nodo);
        }else{
            nodos.get(0).agregar(nodo);
        }

    }

    String inOrder(boolean ingnorarRaiz){
        String ret = "";

        if (!ingnorarRaiz){
            ret =ret + dato.toString() + ",";
        }

        for (int i=0;i<nodos.size();i++){
            ret = ret + nodos.get(i).inOrder(false);
        }

        return ret;

    }


}

1 个答案:

答案 0 :(得分:1)

如果您在自定义类上调用equals,则应该实现它(以及hashCode)。