Red de conocimiento informático - Descarga de software - Diseñar un pequeño diccionario inglés-chino usando C++

Diseñar un pequeño diccionario inglés-chino usando C++

La forma más rápida de implementar un diccionario es un árbol trie.

Este árbol se utiliza específicamente para implementar diccionarios. Pero la operación de eliminación del árbol trie es más problemática. Se pueden implementar árboles de búsqueda binarios y pueden ser muy rápidos. El árbol AVL es simplemente un árbol binario equilibrado y no existe una mejora objetiva de la velocidad en las aplicaciones de diccionario porque los diccionarios no producen árboles binarios extremos (listas vinculadas).

El siguiente es el código para mi árbol de búsqueda binaria. La ventaja de un árbol de búsqueda binario es que es fácil de implementar y su recorrido ordenado no se genera simplemente en orden alfabético.

//Árbol de búsqueda binaria, no autoequilibrado

//Autor: Zhang Qingxing, 28 de diciembre de 2009. Preparándose para una entrevista en Google

# include & ltiostream & gt

Usando el espacio de nombres std

Estructura BST

{

int data;

BST * izquierda

BST *derecha;

};

//Tiempo de ejecución: promedio O (logn ), peor caso O(n)

Búsqueda booleana (BST * & amproot, int key) //Si la clave no existe, devuelve false

{

if(root==NULL)

Devuelve false

if(key<root->data)

Devuelve búsqueda( root->left , clave);

else if(key>root->data)

devolver búsqueda(root->right, Key);

Otros

Devuelve verdadero

}

//Tiempo de ejecución: promedio O(logn), peor caso O (n)

Inserción booleana ( BST * & amproot, int key) //Si la clave ya existe, devuelve false

{

if(root= =NULL)

{

BST *nodo =nuevo BST;

Nodo->; datos = clave;

Nodo-> ; izquierda = nodo-& gt; /p>

raíz = nodo;

devuelve verdadero

}

si no (clave<raíz->datos)

return insert(root->left, key);

else if(key>root-> data)

Return insert(root->right, key) ;

Otro

Devuelve falso

}

//Tiempo de ejecución: promedio O(logn), peor caso O(n)

Boolean delete(BST * & amproot, int key) //Devuelve false si la clave no existe.

{

if(root == NULL)//No existe tal clave

Devuelve falso

else if(key & lt ;root->data)

return remove(root->left, key);

si no(key>root->data)

return remove(root-& gt; sí, clave);

else//encontrar el nodo

{

if((root -> left == NULL)&&(root->right == NULL))//Sin nodo secundario (nodo hoja)

{

BST * tmp = root

root = NULL

Eliminar tmp

}

else if((root-& gt; left = = NULL)| |(root-> right = = NULL))//un niño

{

BST * tmp = root

if(root ->left==NULL)

root = root->right;

Otro

root = root->left;

Eliminar tmp

}

else//dos hijos: Reemplace el valor del nodo con el sucesor ordenado y elimine el nodo

{

BST * tmp = root-& gt; derecha;

mientras(tmp->;izquierda!=null)

tmp = tmp-& gt; >data;

eliminar(root, tmpdata);

root->data = tmpdata

p>

}

Devuelve verdadero

}

}

//Tiempo de ejecución: O(n)

pedido anulado (BST * & amp; nodo)

{

if (nodo!=null)

{

en orden(nodo-& gt; izquierda );

cout & lt& ltnode->;data& lt& lt" ";

en orden(nodo-& gt; derecha );

}

}

//Tiempo de ejecución: O(n)

Reserva no válida (BST* y nodo amp)

{

if (nodo! =null)

{

cout<<node->data<<" "

suscripción(nodo->izquierda)

Suscripción(nodo-> par);

}

}

//Tiempo de ejecución: O(n)

Orden de publicación no válida (BST * y nodo amp )

{

if (nodo!=null)

{

Postorder(nodo->izquierda);

Postorder(nodo->right);

cout<<node->datos<<" ";

}

}

int main()

{

bool b;

BST * raíz = NULL

b = insertar(raíz, 1

b = insertar(raíz, 3);

b = insertar(raíz, 7);

b = insertar(raíz, 5

b = insertar(raíz, 77); p>

p>

b = insertar(raíz, 10);

b = insertar(raíz, 4);

b = insertar(raíz, 13)

//Ordenado

cout & lt& lt"En orden:";

inorder(root);

cout & lt& ltendl

//Reserva

cout & lt& lt"Reserva:";

Reserva (raíz);

cout & lt& ltendl

//Pedido posterior

cout & lt& lt"Pedido posterior:";

Orden posterior (raíz);

cout & lt& ltendl

//Buscar 7

if(buscar(raíz, 7))

cout & lt& lt"¡Encontramos 7!"& lt& ltendl

Otro

cout & lt& lt"7 no existe!"& lt& ltendl

b = remove(root, 7);

cout & lt& lt"-"& ltendl

//Ordenado

cout & lt& lt"En orden:";

inorder(root);

cout & lt& ltendl

//Reserva

cout & lt& lt"Reserva:";

Reserva (root) ;

cout & lt& ltendl

//Pedido posterior

cout & lt& lt"Pedido posterior:";

Pedido posterior ( root) ;

cout & lt& ltendl

if(search(root, 7))

cout & lt& lt"¡Encontramos 7!"& lt& ltendl

p>

Otro

cout & lt& lt"7 no existe!"& lt& ltendl

Devuelve 0;

}