英汉字典源代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字典最快速的实现方法是trie tree。

这个树是专门用来实现字典的。但是trie tree的删除操作比较麻烦。用二叉查找树可以实现,速度也可以很快。AVL tree只不过是平衡的二叉树,在字典这个应用上没有客观的速度提升,因为字典不会产生极端化的二叉树(链表)。

下面是我的二叉查找树的代码。二叉查找树的优点是实现容易,而且它的inorder traverse 既是按照字母顺序的输出。

//binary search tree, not self-balancing

//by Qingxing Zhang, Dec 28,2009. prep for google interview

#include

using namespace std;

struct BST

{

int data;

BST *left;

BST *right;

};

//runtime: O(logn) on average, O(n) worst case

bool search(BST *&root, int key)//return false if the key doesn't exist

{

if(root==NULL)

return false;

if(key < root->data)

return search(root->left,key);

else if(key > root->data)

return search(root->right,key);

else

return true;

}

//runtime: O(logn)on average, O(n) worst case

bool insert(BST *&root, int key)//return false if the key already exists

{

if(root==NULL)

{

BST *node = new BST;

node->data = key;

node->left = node->right = NULL;

root = node;

return true;

}

else if(key < root->data)

return insert(root->left,key);

else if(key > root->data)

return insert(root->right,key);

else

return false;

}

//runtime:O(logn) on average, O(n) worst case

bool remove(BST *&root,int key)//return false if the key doesn't exist.

{

if(root==NULL)//no such key

return false;

else if(key < root->data)

return remove(root->left,key);

else if(key > root->data)

return remove(root->right,key);

else//node found

{

if((root->left==NULL)&&(root->right==NULL))//no child(leaf node)

{

BST *tmp = root;

root = NULL;

delete tmp;

}

else if((root->left==NULL)||(root->right==NULL))//one child

{

BST *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 {

BST *tmp = root->right;

while(tmp->left!=NULL)

tmp = tmp->left;

int tmpdata = tmp->data;

remove(root,tmpdata);

root->data = tmpdata;

}

return true;

}

}

//runtime:O(n)

void inorder(BST *&node) {

if(node!=NULL)

{

inorder(node->left);

cout << node->data << " ";

inorder(node->right);

}

}

//runtime:O(n)

void preorder(BST *&node) {

if(node!=NULL)

{

cout << node->data << " ";

preorder(node->left);

preorder(node->right);

}

}

//runtime:O(n)

void postorder(BST *&node) {

if(node!=NULL)

{

postorder(node->left);

postorder(node->right);

cout << node->data << " "; }

}

int main()

{

bool b;

BST *root = NULL;

b = insert(root,1);

相关文档
最新文档