浙大计算机研究生复试上机考试(2010)——二叉搜索树(hdu3791)
来源:互联网 发布:网站的数据库在哪里 编辑:程序博客网 时间:2024/05/22 20:28
查看原题
题意
先给你一个数字n,接着是一串数字,你把它顺序扫描后建立一棵二叉搜索树。然后再陆续给你n串数字,判断它们尽力的二叉树和第一个二叉树是否相同。
题目保证给出的字符串长度不大于10.每个数字在0~9之间。且给出的数字不会有重复。
分析
很明显,这是一个数据结构的题目,很容易想到的就是直接自定义个二叉树结点的结构来做了。但是我感觉那样好麻烦,题目已经给出了数字长度不会大于10.所以直接用静态的链表也就是数组来解就可以了。要是数字的个数太多就不能这样做了。来看二叉树中结点与数组下标的对应关系。
注意!上图中结点中的数字并不代表结点的值,而是代表与保存结点值的数组的下标之间的对应关系。
- 假设用于存储的数组为node。那么根节点保存在node[0],而左儿子保存在node[1],右儿子保存在node[2]。
- 可知父节点与子节点之间的换算关系是这样的:若父节点为 i ,那么左儿子为(i+1)*2-1,右儿子为(i+1)*2。
- 所以我们要做的就是分别用两个int数组来保存前后两个字符串建立的二叉树。然后去比较这两个数组是否相等就可以了。
- 那么我们的node数组需要多大呢?10?9?错错错。这里要考虑所有可能的结点插入情况。其中最极端一种就是有9个结点,但是全部是右子树,这是最浪费空间的情况。此时树的深度是9。考虑深度为9的满二叉树的结点个数:2^9-1。只要大于这个数字就好了。
代码
#include <iostream>using namespace std;#include <cstring>#define MAX 512int node[MAX];int node2[MAX];void makeTree(char *str,int *node){for(int i=0;str[i]!='\0';i++){int j=0;int t=str[i]-'0';while(node[j]!=-1){if(t>node[j])j=(j+1)*2;if(t<node[j])j=(j+1)*2-1;}node[j]=t;}}void compare(){for(int i=0;i<MAX;i++)if(node[i]!=node2[i]){cout<<"NO"<<endl;return;}cout<<"YES"<<endl;}int main(){int n;char str[12],str2[12];cin>>n;if(!n) return 0;memset(node,-1,sizeof(node));cin>>str;makeTree(str,node);int len=strlen(str);while(n--){memset(node2,-1,sizeof(node2));cin>>str2;int len2=strlen(str2);if(len!=len2){cout<<"NO"<<endl;continue;}makeTree(str2,node2);compare();}main();return 0;}
PS:
这里因为n有多个,一般的main函数章写法就是while(cin>>n){ }了,但是我不想套这么大的一个花括号,于是就写了个递归调用main()。哈哈O(∩_∩)O~
2 1
- 浙大计算机研究生复试上机考试(2010)——二叉搜索树(hdu3791)
- 浙大计算机研究生复试上机考试-2010年
- 浙大计算机研究生复试上机考试-2010年 .
- 浙大计算机研究生复试上机考试-2010年
- 浙大计算机研究生复试上机考试-2010年
- 浙大计算机研究生复试上机考试-2010年 zoj问题
- 算法之美——浙大计算机研究生复试上机考试-2009年
- 浙大研究生复试上机考试2005——畅通工程
- 浙大计算机研究生复试上机考试-2009年
- 浙大计算机研究生复试上机考试-2005年-A+B
- 浙大计算机研究生复试上机考试-2009年
- 浙大计算机研究生复试上机考试2005年 A+B
- 浙大计算机研究生复试上机考试-2005年-A+B
- 浙大计算机研究生复试上机考试-2006年_Prim_hdoj1233
- 浙大计算机研究生复试上机考试-2007年_Prim_Kruskal_hdoj1863
- 浙大计算机研究生复试上机考试2010年----最短路径问题
- 浙大计算机研究生复试上机考试-2010年 最短路径问题
- 畅通工程 hdu 1863 最小生成树+并查集 浙大计算机研究生复试上机考试-2007年
- iOS开发之xib技巧介绍
- ffplay 0.5版本源码及流程分析
- struts2采用convention-plugin实现零配置
- 4 Foundation和带属性的字符串(1)
- AMD OpenCL例子阅读笔记系列之Radix_Sort(二)
- 浙大计算机研究生复试上机考试(2010)——二叉搜索树(hdu3791)
- 好久没有写操作符重载了 自己重新写了个 温习了一下细节 温习友元 this const 引用
- RMI no such object in table异常
- 73 Java 枚举类(4)
- uml
- linux与windows线程函数对照
- SQL基本查询语句
- 无刷新修改页面的浏览器地址栏显示地址的方法
- 生活物联网如何“接地气”,走进寻常百姓家