搜索二叉树应用——简单字典实现
2018-02-27 19:51
696 查看
搜索二叉树基本概念请看上篇博客
这两个问题都是典型的K(key)V(value)问题,我们用KV算法解决。
判断一个单词是否拼写正确:假设把所有单词都按照搜索树的性质插入到搜索二叉树中,我们判断一个单词拼写是否正确就是在树中查找该单词是否存在(查找key是否存在)。
结构声明下
插入,查找函数代码如下:
测试代码:
测试结果:
请模拟实现一个简单的字典(简单的中英文字典)
结构构建
查找函数与上面相同,插入函数有所改变。
测试代码:
测试结果
构建测试案例尽量构建全面,防止特殊情况被忽略。
这两个问题都是典型的K(key)V(value)问题,我们用KV算法解决。
判断一个单词是否拼写正确:假设把所有单词都按照搜索树的性质插入到搜索二叉树中,我们判断一个单词拼写是否正确就是在树中查找该单词是否存在(查找key是否存在)。
结构声明下
typedef char* KeyType; typedef struct BSTreeNode { struct BSTreeNode *_left; struct BSTreeNode *_right; KeyType _key; }BSTreeNode;
插入,查找函数代码如下:
int BSTreeNodeInsertR(BSTreeNode **tree,KeyType key) //搜索树的插入 { int tmp = 0; if(*tree == NULL) { *tree = BuyTreeNode(key); return 0; } tmp = strcmp((*tree)->_key,key); if (tmp>0) return BSTreeNodeInsertR(&(*tree)->_left,key); else if (tmp<0) return BSTreeNodeInsertR(&(*tree)->_right,key); else return -1; } BSTreeNode *BSTreeNodeFindR(BSTreeNode *tree,KeyType const key) //查找 { int tmp = 0; if (!tree) return NULL; tmp = strcmp(tree->_key,key); if (tmp > 0) return BSTreeNodeFindR(tree->_left,key); else if (tmp < 0) return BSTreeNodeFindR(tree->_right,key); else return tree; }
测试代码:
void TestApplication() { BSTreeNode *tree = NULL; BSTreeNodeInsertR(&tree,"hello"); BSTreeNodeInsertR(&tree,"world"); BSTreeNodeInsertR(&tree,"int"); BSTreeNodeInsertR(&tree,"char"); BSTreeNodeInsertR(&tree,"float"); BSTreeNodeInsertR(&tree,"double"); printf("%s \n", BSTreeNodeFindR(tree,"char")->_key); printf("%s \n", BSTreeNodeFindR(tree,"double")->_key); printf("%s \n", BSTreeNodeFindR(tree,"int")->_key); printf("%s \n", BSTreeNodeFindR(tree,"float")->_key); printf("%s \n", BSTreeNodeFindR(tree,"hello")->_key); printf("%s \n", BSTreeNodeFindR(tree,"world")->_key); printf("%p \n", BSTreeNodeFindR(tree,"chars")); printf("%p \n", BSTreeNodeFindR(tree,"str")); }
测试结果:
请模拟实现一个简单的字典(简单的中英文字典)
结构构建
typedef char* KeyType; typedef int ValueType; typedef struct BSTreeNode { struct BSTreeNode *_left; struct BSTreeNode *_right; KeyType _key; ValueType _count; }BSTreeNode;
查找函数与上面相同,插入函数有所改变。
int BSTreeNodeInsertR(BSTreeNode **tree,KeyType key, ValueType value) //搜索树的插入 { int tmp = 0; if(*tree == NULL) { *tree = BuyTreeNode(key,value); return 0; } tmp = strcmp((*tree)->_key,key); if (tmp>0) return BSTreeNodeInsertR(&(*tree)->_left,key,value); else if (tmp<0) return BSTreeNodeInsertR(&(*tree)->_right,key,value); else return -1; }
测试代码:
void test() { BSTreeNode *tree = NULL; BSTreeNodeInsertR(&tree,"hello","你好"); BSTreeNodeInsertR(&tree,"world","世界"); BSTreeNodeInsertR(&tree,"char","字符"); BSTreeNodeInsertR(&tree,"int","整形"); BSTreeNodeInsertR(&tree,"float","浮点型"); printf("%s \n", BSTreeNodeFindR(tree,"char")->_value); printf("%s \n", BSTreeNodeFindR(tree,"int")->_value); printf("%s \n", BSTreeNodeFindR(tree,"float")->_value); printf("%s \n", BSTreeNodeFindR(tree,"hello")->_value); printf("%s \n", BSTreeNodeFindR(tree,"world")->_value); printf("%p \n", BSTreeNodeFindR(tree,"double")); }
测试结果
构建测试案例尽量构建全面,防止特殊情况被忽略。
相关文章推荐
- 搜索二叉树应用---判断单词正确与否,简单字典的实现,出现ip次数的统计
- 搜索二叉树的简单实现
- 二叉树的创建、前序中序后序递归遍历与非递归遍历、层序遍历以及二叉树简单应用的C语言实现
- (七)数据结构之搜索二叉树的简单实现
- 搜索二叉树的简单实现
- 初识树结构,简单模拟无规律的二叉树,实现二叉树的构建,计算树的深度以及三种遍历方式以及搜索删除,销毁整个树
- 如何应用Asp.Net Mvc内建功能(DefaultModelBinder)实现简单类型、复杂类型、集合类型,以及字典类型的自动绑定
- 二叉搜索树应用-判断一个单词是否拼写正确,实现简单字典
- 模拟实现一个简单的中英互译字典——二叉搜索树的应用KV模型
- 使用DataList和SQL2005实现分页显示数据(应用举例:站内简单搜索)
- Ext.net中的MessageBox的简单应用实现代码
- java实现简单二叉树排序
- OC中用字典创建一个具有省市区的应用(简单的字典运用代码)
- Iframe的简单应用,js实现图片左右移动
- jquery实现简单搜索$("p:contains()")
- Auto Layout简单应用——以编码的方式实现Auto Layout自动布局(一)
- [置顶] ExtJs4.2应用:使用ExtJs扩展组件searchfield实现数据搜索功能
- 使用Lucene实现一个简单的布尔搜索功能
- GoogleMap的鼠标点击标注、搜索和设置城市的简单应用
- 二叉树的简单操作(c++实现)