Colección de citas famosas - Colección de poesías - Aplicación del árbol de diccionario

Aplicación del árbol de diccionario

Dada una lista de vocabulario de n palabras y un artículo escrito en inglés en minúsculas. Escriba todas las palabras nuevas que no estén en el vocabulario en orden de aparición.

En este problema, podemos utilizar árboles de enumeración de matrices, hash y diccionario para construir primero un árbol de palabras familiar y luego leerlos en el artículo para compararlos. Este método es relativamente eficaz. Dados n nombres en inglés diferentes que constan de una sola palabra, le permite generarlos en orden lexicográfico de menor a mayor.

Ordenar por árbol de diccionario y crear árbol de diccionario por matriz. Obviamente, todos los nodos secundarios de cada nodo de este árbol están ordenados según el tamaño alfabético. Primero atraviesa el árbol. # incluir ltcstring gt # incluir ltiostream gt # incluir ltconio.h gtusingnamespacestdnamespacetrie{templateltclassT, size_tCHILD_MAX gt/* parámetro t: tipo de datos reservados. Parámetros child_MAX: Tamaño del conjunto de punteros al nodo secundario. */struct nod { t servido; nod ltt, NIÑO _ MAX gt* NIÑO [NIÑO _ MAX]; nod () { memset (esto, 0, tamaño de * esto } ~ nod () { para (unsignedi = 0; i ltCHILD _ MAXi ) eliminar hijo [I]; } recorrido vacío (char * str, unsignedindex) { unsignedi; for (I = 0; i lt index; i) cout lt ltstr [I]; ; ltreservedlt ltendlfor(I = 0; I ltCHILD _ MAXi) { if (child[I]) { str[index] = I; child[I]- gt; ; Plantilla ltclassT, size_tCHILD_MAX=127gt. /* parámetro t: tipo de dato reservado. Parámetros child_MAX: Tamaño del conjunto de punteros al nodo secundario. */class trie { privado: nod ltt; t, CHILD _ MAX gt root; cuenta pública: nod ltt, CHILD _ MAX gt* AddStr (char * str nod, CHILD _ MAX gt* buscar str (char * str); ); booldeletstr (char * str); recorrido vacío () { charstr [100];

Traverse (str, 0); plantilla ltclassT, size_tCHILD_MAX gt nod ltt, CHILD_MAX gt* trie ltt, CHILD_MAX gt* AddStr (char * str) { nod lt, CHILD_MAX gt * ahora = amp root; (ahora- gt; niño [* str] == NULL) ahora- gt; niño [* str] = newnod lt; CHILD_MAX gt ahora = ahora- gt; )!='\0');returnnow} plantilla ltclassT, size_tCHILD_MAX gt nod ltt, CHILD_MAX gt* trie ltt, CHILD_MAX gt* find str (char * str) { nod lt, CHILD_MAX gt* ahora = amp root; { if (now- gt; child [* str] == NULL) return NULL; ahora = now- gt; child [* str】;} while (*(str)!='\0'); ,size_tCHILD_MAX gtbooltrie ltt,CHILD_MAX gt* DeleteStr(char *str){ nod lt;t,CHILD_ MAX gt* * nods = newnod ltt, CHILD_MAX gt*[strlen(str)]; * ahora = amp root; ]; } while (* (str)! = '\0'); snods-; while (s nods gt; 0) { for (unsignedi = 0; i ltCHILD _ MAXi ) if (snods] - gt; niño [i] ! = NULL) devuelve verdadero; eliminar asentimientos [s asentimientos]; asentir [-snods] - gt; hijo [*(-str)] = } returntrue} } int main() { //TestProgramtrie:: trie lt; int gt tree; while(1) { cout lt1 para agregar cadena lt; ltendlcout lt lt3fordeleteasterring lt.

ltendlcout lt lt4fortraversallt ltendlcout lt lt5forexitlt ltendlcharstr[100]; switch(getch()) { case '1': CIN getline(str, 100); AddStr(str)-》;reservadolt;ltTimes. lt ltendl break; caso '2': cin.getline(str, 100); trie::nod ltint, 127》*find; FindStr(cadena); si (!find) cout lt no se encuentra. lt ltendlsecout lt ltEsta picadura ha existido para lt ltFind->Reserved lt ltTimes. lt ltendl se rompe; caso '3': cin .getline(str, 100); cout lt lt la acción es lt lt(tree.DeleteStr(str)? Éxito.: Sin éxito.) lt ltendl se rompe; atravesar(); romper; caso "5": devolver 0;