• Jueves 14 de Noviembre de 2024, 17:01

Autor Tema:  Nodos árbol TRIE. Herencia  (Leído 1707 veces)

registrosmfg

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Nodos árbol TRIE. Herencia
« en: Lunes 12 de Abril de 2010, 10:34 »
0
Hola a tod@s, hace unas semanas que me estoy volviendo loco con el diseño de un árbol Trie y no consigo que me salga. Mis conocimientos en herencia son bastante pobres y les agradecería que me echaran una mano con las clases NodoTrie.
Tengo dos tipos de nodos, uno con enlaces y otro con información. He creado una clase general (NodoTrie) y luego dos subclases que heredan de la primera (NEnlaces y NInfo).
¿Alguién me podría decir como tengo que hacer la función el .h para que me funcione la función buscar?
Esto es lo que tengo:

typedef enum {LNK,INFO} TipoNodo;

class NodoTrie {
private:
TipoNodo tipo;
public:
NodoTrie(TipoNodo tn);
NodoTrie *buscar(char *, int);
.......
};

class NodoLNK:public NodoTrie {
private:
NodoTrie *final;
NodoTrie *lpalabras[NUM_ENLACES];
public:
NodoLNK();
~NodoLNK();
};

class NodoINF: public NodoTrie {
protected:
char *palabra;
public:
NodoINF(char *sPal);
};

Y EN EL .CPP:
==============

NodoTrie* NodoTrie::buscar(char *sPal, int p){
if (tipo == LNK) {
NodoLNK *ND = (NodoLNK *) this;
if (strlen(sPal)>p) {
int iLetra=PosLetra(sPal[p]);
if (ND->lpalabras[iLetra] != NULL)
return ND->lpalabras[iLetra]->buscar(sPal, p+1);
}
}
else {
NodoINF *NI = (NodoINF *) this;
if (strcmp(sPal, NI->palabra)==0) return this;
}

return NULL;
}

LOS ERRORES QUE ME DAN SON:

'NodoTrie*NodoLNK::lpalabras[10] is private within this context

Creo que es porque utilizo lpalabras que está definida en NodoLNK en una
función de NodoTrie
¿Debería crear un método buscar para cada tipo de nodo?¿Como lo hago?
¿Como lo llamo desde el NodoTrie?

Estoy hecho un lío, por favor échenme una mano
Gracias, muchas gracias