当前位置:首页 » 编程语言 » trie树c语言

trie树c语言

发布时间: 2024-04-03 00:57:28

❶ 求一个实现简单的英汉词典(30词左右)c++的C语言程序

字典最快速的实现方法是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 <iostream>
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);
b = insert(root,3);
b = insert(root,7);
b = insert(root,5);
b = insert(root,77);
b = insert(root,10);
b = insert(root,4);
b = insert(root,13);

//inorder
cout << "In-order:";
inorder(root);
cout << endl;
//preorder
cout << "Pre-order:";
preorder(root);
cout << endl;
//postorder
cout << "Post-order:";
postorder(root);
cout << endl;
// search for 7
if(search(root,7))
cout << "7 found!" << endl;
else
cout << "7 doesn't exist!" << endl;

b = remove(root,7);
cout << "----------------" << endl;

//inorder
cout << "In-order:";
inorder(root);
cout << endl;
//preorder
cout << "Pre-order:";
preorder(root);
cout << endl;
//postorder
cout << "Post-order:";
postorder(root);
cout << endl;

if(search(root,7))
cout << "7 found!" << endl;
else
cout << "7 doesn't exist!" << endl;

return 0;
}

热点内容
sql数据结构 发布:2024-11-28 16:32:13 浏览:713
scratch编程自学 发布:2024-11-28 16:09:15 浏览:825
苏州cnc编程学徒招聘 发布:2024-11-28 16:07:44 浏览:610
linux中怎么搭建http服务器配置 发布:2024-11-28 16:04:17 浏览:291
缓存expires 发布:2024-11-28 16:02:27 浏览:383
图像的jpeg压缩matlab 发布:2024-11-28 16:02:05 浏览:940
androidcompilewith 发布:2024-11-28 16:00:19 浏览:435
访问跳转 发布:2024-11-28 15:54:44 浏览:698
算法对算 发布:2024-11-28 15:41:38 浏览:4
称重系统界面如何找配置项 发布:2024-11-28 15:28:29 浏览:570