小型英汉词典(黑白界面下的)使用了二叉搜索树C++

来源:互联网 发布:微信服务号 域名 端口 编辑:程序博客网 时间:2024/06/04 22:47
// 小型英汉词典.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>#include <fstream>using namespace std;class Node{public:string English;string Chinese;Node *left;Node *right;};//runtime: O(logn) on average, O(n) worst casestring search(Node *&root, string English)//return false if the key doesn't exist{if(root==NULL)   return "单词不存在";if(English < root->English)   return search(root->left,English);else if(English > root->English)   return search(root->right,English);elsereturn root->Chinese;}//runtime: O(logn)on average, O(n) worst casestring insert(Node *&root, string English,string Chinese)//return false if the key already exists{if(root==NULL){   Node *node = new Node;   node->English = English;   node->Chinese = Chinese;   node->left = node->right = NULL;   root = node;   return "插入成功";}else if(English < root->English)   return insert(root->left,English,Chinese);else if(English > root->English)   return insert(root->right,English,Chinese);else   return "插入失败";}//runtime:O(logn) on average, O(n) worst casestring remove(Node *&root,string English)//return false if the key doesn't exist.{if(root==NULL)//no such key   return "删除失败";else if(English < root->English)   return remove(root->left,English);else if(English > root->English)   return remove(root->right,English);else//node found{   if((root->left==NULL)&&(root->right==NULL))//no child(leaf node)   {    Node *tmp = root;    root = NULL;    delete tmp;   }   else if((root->left==NULL)||(root->right==NULL))//one child   {    Node *tmp = root;    if(root->left==NULL)     root = root->right;    else     root = root->left;    delete tmp;   }   else//two children:replace node value with inorder successor and delete that node   {    Node *tmp = root->right;    while(tmp->left!=NULL)     tmp = tmp->left;    string tmpEnglish = tmp->English;    remove(root,tmpEnglish);    root->English = tmpEnglish;   }   return "删除成功";}}string createIndex(Node *&root)//create a dictionary index{string s;char ch[50];for(char i='a';i<='z';i++){s=i;s="lib/"+s+".txt";ifstream infile(s);for(;!infile.eof();){int k=0;infile.getline(ch,50);int i;for(i=0;i<50;i++){if(ch[i]=='\0')break;if(ch[i]==' ')k=i;}string judgeword(ch);if(judgeword.length()!=0){string English = judgeword.substr(0,k);string Chinese = judgeword.substr(k+1,i);insert(root,English,Chinese);}}infile.close();}return "词典打开结束";}void menu(){cout<<"_________________________"<<endl;cout<<"|     使用说明          |"<<endl;cout<<"|1、打开词典 2、查找单词|"<<endl;cout<<"|3、删除单词 4、添加单词|"<<endl;cout<<"|5、关闭词典            |"<<endl;cout<<"|查找和删除只需输入英文 |"<<endl;cout<<"|添加需要输入中文和英文 |"<<endl;cout<<"|_______________________|"<<endl;}void fun(){Node *root = NULL;int k;string Chinese,English;while(true){cin>>k;if(k==1){cout<<createIndex(root)<<endl;}else if(k==2){cout<<"输入英文:"<<endl;cin>>English;cout<<search(root,English)<<endl;}else if(k==3){cout<<"输入英文:"<<endl;cin>>English;cout<<remove(root,English)<<endl;}else if(k==4){cout<<""<<endl;cin>>English;cout<<""<<endl;cin>>Chinese;cout<<insert(root,English,Chinese)<<endl;}else if(k==5){break;}else{}}}int main(){menu();fun();return 0;}