利用搜索二叉树判断一个单词是否拼写正确:

假设把所有单词都按照搜索树的性质插入到搜索二叉树中,我们判断一个单词拼写是否正确就是在树中查找该单词是否存在(查找key是否存在)。

/*****************************************
*Date:2018年3月26日14:42:54
*Author: Meng
*WebSite:msyci.com
*QQ:3515955122
*****************************************/# include <stdio.h>
# include <stdlib.h>
# include <string.h>
#include<assert.h>typedef char* KeyType;
typedef char* ValueType;typedef struct BSTreeNode
{struct BSTreeNode*  _left;struct BSTreeNode*  _right;KeyType  _key;ValueType _value;
}BSTreeNode;BSTreeNode *BuyTreeNode(KeyType x,ValueType value ) //创建节点
{BSTreeNode *node = (BSTreeNode*)malloc(sizeof(BSTreeNode));assert(node);node->_key = x;node->_left = NULL;node->_right = NULL;node->_value = value;return node;
}//插入、查找函数
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);elsereturn -1;
}BSTreeNode*  BSTreeNodeFindR(BSTreeNode* tree, KeyType  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,"China","中国");BSTreeNodeInsertR(&tree,"score","成绩");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,"China")->_value);printf("%s \n", BSTreeNodeFindR(tree,"score")->_value);printf("%p \n", BSTreeNodeFindR(tree,"double"));}int main(void)
{TestApplication();char c = getchar();return 0;
}

运行结果:

实现简单的中英文字典

/*****************************************
*Date:2018年3月26日15:35:07
*Author: Meng
*WebSite:msyci.com
*QQ:3515955122
*****************************************/# include <stdio.h>
# include <stdlib.h>
# include <string.h>
#include<assert.h>typedef char* KeyType;
typedef char* ValueType;typedef struct BSTreeNode
{struct BSTreeNode*  _left;struct BSTreeNode*  _right;KeyType  _key;ValueType _value;
}BSTreeNode;BSTreeNode *BuyTreeNode(KeyType x,ValueType value ) //创建节点
{BSTreeNode *node = (BSTreeNode*)malloc(sizeof(BSTreeNode));assert(node);node->_key = x;node->_left = NULL;node->_right = NULL;node->_value = value;return node;
}//插入、查找函数
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);elsereturn -1;
}BSTreeNode*  BSTreeNodeFindR(BSTreeNode* tree, KeyType  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,"China","中国");BSTreeNodeInsertR(&tree,"score","成绩");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,"China")->_value);printf("%s \n", BSTreeNodeFindR(tree,"score")->_value);printf("%p \n", BSTreeNodeFindR(tree,"double"));}int main(void)
{TestApplication();char c = getchar();return 0;
}

运行结果:

搜索二叉树之字典实现相关推荐

  1. 链表问题15——将搜索二叉树转换成双向链表

    题目 将一颗搜索二叉树按照中序遍历(左-中-右)的顺序,变成一个有序的双向链表. 所谓的先序遍历.中序遍历和后序遍历都针对的是中间的节点也就是根节点,先序遍历为中-左-右,后序遍历为左-右-中 思路 ...

  2. 判断一个数列是不是搜索二叉树后续遍历输出的结果

    剑平面阿里被问到这个,刚开始画了下看有什么性质,乱蒙了几个都被推翻了,初始感觉就是要O(n)的,因为印象中BST的构树都可以O(nlogn)搞定.然后剑平说最后一个数肯定是根节点,一下反应过来了,就是 ...

  3. 调整搜索二叉树中两个错误的节点

    一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回.已知二叉树中所有节点的 值都不一样,给定二叉树的头节点 head,返回一个长度为 ...

  4. 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)

    平衡二叉树的解法:主要是求出二叉树的高度,若根节点的左子树的高度与右子树的高度差小于等于1,则表示该二叉树为平衡二叉树 public static class Node{public int valu ...

  5. 找到二叉树中符合搜索二叉树条件的最大拓扑结构

    找到二叉树中符合搜索二叉树条件的最大拓扑结构 给定一棵二叉树的头节点 head,已知所有节点的值都不一样,返回其中最大的.且符合搜索二叉树 条件的拓扑结构的节点数.这里的拓扑结构是指,你可以在二叉树中 ...

  6. 寻找搜索二叉树中两个错误的节点

    题目:一颗二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这颗二叉树不再是搜索二叉树,请找到两个错误节点并返回.已知二叉树中所有节点的值都不一样,给定二叉树的头节点head,返回一个长度为2 ...

  7. 通过有序数组生成平衡搜索二叉树

    题目:给定一个有序数组sortArr,已知其中没有重复值,用这个有序数组生成一颗平衡搜索二叉树,并且该搜索二叉树中序遍历的结果与sortArr一致 思路:用有序数组最中间的数生成搜索二叉树的头节点,然 ...

  8. 根据后续数组重建搜索二叉树

    题目: 给定一个整型数组arr,已知其中没有重复值,判断arr是否可能是节点值类型为整型的搜索二叉树后续遍历的结果 思路:根据搜索二叉树的性质,比后续数组最后一个元素值小的数组会在数组的左边,比数组最 ...

  9. 将搜索二叉树转换成双向链表

    题目: 对二叉树的节点来说,有本身的值域,有指向左孩子和右孩子的两个指针:对双向链表的节点来说,有本身的值域,有指向上一个节点和下一个节点的指针.在结构上,两种结构有相似性,现在有一棵搜索二叉树,请将 ...

最新文章

  1. C#学习视频分享与开发技术QQ交流群
  2. TortoiseGit入门(图文教程) Git,Github,puttygen,SSH
  3. java的classpath是什么_JAVA初学者classpath设置情况是什么?
  4. 【每日一题】8月25日题目精讲 XOR-pyramid
  5. windows资源管理器已停止工作后,使用命令提示窗口拷贝文件和运行exe程序
  6. java 布局实例,HarmonyOS Java UI之StackLayout布局示例
  7. 2013-8-9练习[多种方法制作一个计时器]
  8. wordpress发布文章错误:此响应不是合法的JSON响应
  9. 本周ASP.NET英文技术文章推荐[03/18 - 03/24]
  10. LVS 实现负载均衡
  11. 图片拼图效果——ps
  12. mysql分组后查询条数_MySQL分组后,如何统计记录条数
  13. 什么是PMI指数?PMI指数是什么意思? 如何计算PMI指数?
  14. 编程艺术——软件设计模式SOLID原则
  15. vc中cout如何解除fixed控制_C++ fixed用法详解
  16. VR专业名字解释_羊豆豆_新浪博客
  17. android 断点下载的实现,Android实现断点下载的方法
  18. 大学计算机专业哪个学校最好,计算机专业:最好的7所大学!也是全中国“最难考”的大学!...
  19. 电机驱动电路之H桥基本知识---Trinamic电机驱动芯片
  20. DocuCentre SC2020 打印机连接

热门文章

  1. 求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序
  2. jdk1.8 ConcurrentHashMap
  3. Laravel 启动流程分析 (代码全流程)
  4. RocketMQ实战系列-RocketMQ命令详解
  5. 使用openssl生成PEM格式私钥和公钥及ECDSA签名
  6. 关于Rxjava的几个问题
  7. Spring Security:基于MySQL数据库的身份认证
  8. 浅析Condition与等待通知机制
  9. 使用Java来格式化时间
  10. Golang 入门系列(十一)Go语言实现webapi