HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791
中文题不说题意。
建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了。
跟这次的作业第一题一模一样,输出输入改下就好
水的半死。
另外一题我以为是一定要一遍读入一边输出,被骗了,最后一起输出就好。等星期一再发那题的题解。
#include<cstdio>
#include<cstring>
int cur;
struct node
{
char c;
node *left,*right;
node() { left=right=NULL;}
}; struct Tree
{
node *root;
Tree() { root=NULL;} void insert(char x)
{
if(root==NULL)
{
root=new node;
root->left=root->right=NULL;
root->c=x;
return;
} node *p=root;
node *temp=new node;
temp->c=x;
while(true)
{
if(p->c > x) //left;
{
if(p->left!=NULL)
p=p->left;
else
{
p->left=temp;
return;
}
}
else if(p->c < x) //right
{
if(p->right!=NULL)
p=p->right;
else
{
p->right=temp;
return;
}
}
}
} void order(node *root,char *s) //后续前序均可,但中序遍历不可以。
{
if(root==NULL)
return; order(root->left,s);
order(root->right,s);
s[cur++]=root->c;
} }tree; int main()
{
int n;
while(scanf("%d",&n),n)
{
char s[12];
scanf("%s",s);
int len=strlen(s),i;
for(i=0;i<len;i++)
tree.insert(s[i]); char cmp[12];
char tcmp[12];
cur=0;
tree.order(tree.root,cmp);
cmp[cur]='\0';
for(i=0;i<n;i++)
{
cur=0;
tree.root=NULL;
scanf("%s",s);
int j;
for(j=0;j<len;j++)
tree.insert(s[j]); tree.order(tree.root,tcmp);
tcmp[cur]='\0';
printf("%s\n",(strcmp(cmp,tcmp)==0 ? "YES":"NO"));
}
tree.root=NULL;
}
}
附上这次作业原题:
数据结构与算法实验题 10.2 小明
★实验任务
小明今天刚刚学会了搜索二叉树,不同的数字序列可能会得到同一棵搜索二叉树。为了更好的复习。小明先写一个数字序列,接着又写了 n 个数字序列,,他想知道这 n 个序列是否与第一个序列同属于一棵搜索二叉树,但他现在无法判断它们是否是同一棵搜索二叉树,所以他请你帮忙
★数据输入
开始一个数 n,(1<=n<=20) 表示有 n 个需要判断, 接下去一行是一个序列,序列长度小于 10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。 接下去的 n 行有 n 个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
★数据输出
对于这 n 个序列,如果与第一个序列是同一棵搜索二叉树,输出“Yes”,否则输出“No”。
就是上面的代码改改输入和输出的Yes和No和HDU那题不一样(HDU是YES和NO)
#include<cstdio>
#include<cstring>
int cur;
struct node
{
char c;
node *left,*right;
node() { left=right=NULL;}
}; struct Tree
{
node *root;
Tree() { root=NULL;} void insert(char x)
{
if(root==NULL)
{
root=new node;
root->left=root->right=NULL;
root->c=x;
return;
} node *p=root;
node *temp=new node;
temp->c=x;
while(true)
{
if(p->c > x) //left;
{
if(p->left!=NULL)
p=p->left;
else
{
p->left=temp;
return;
}
}
else if(p->c < x) //right
{
if(p->right!=NULL)
p=p->right;
else
{
p->right=temp;
return;
}
}
}
} void order(node *root,char *s) //后续前序均可,但中序遍历不可以。
{
if(root==NULL)
return; order(root->left,s);
order(root->right,s);
s[cur++]=root->c;
} }tree; int main()
{
int n;
scanf("%d",&n); char s[12];
scanf("%s",s);
int len=strlen(s),i;
for(i=0;i<len;i++)
tree.insert(s[i]); char cmp[12];
char tcmp[12];
cur=0;
tree.order(tree.root,cmp);
cmp[cur]='\0';
for(i=0;i<n;i++)
{
cur=0;
tree.root=NULL;
scanf("%s",s);
int j;
for(j=0;j<len;j++)
tree.insert(s[j]); tree.order(tree.root,tcmp);
tcmp[cur]='\0';
printf("%s\n",(strcmp(cmp,tcmp)==0 ? "Yes":"No"));
}
tree.root=NULL; }
HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST的更多相关文章
- hdu 3791 二叉搜索树(数据结构)
二叉搜索树 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 3791:二叉搜索树(数据结构,二叉搜索树 BST)
二叉搜索树 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ...
- HDU 3791 二叉搜索树
二叉搜索树 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 3791 二叉搜索树 题解
Problem Description 推断两序列是否为同一二叉搜索树序列 Input 開始一个数n,(1<=n<=20) 表示有n个须要推断,n= 0 的时候输入结束. 接下去一行是 ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
- 70 数组的Kmin算法和二叉搜索树的Kmin算法对比
[本文链接] http://www.cnblogs.com/hellogiser/p/kmin-of-array-vs-kmin-of-bst.html [分析] 数组的Kmin算法和二叉搜索树的Km ...
- 数据结构与算法实验题 4.2 Who is the strongest
数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能 ...
- 数据结构与算法实验题 6.1 s_sin’s bonus
数据结构与算法实验题 6.1 s_sin's bonus ★实验任务 正如你所知道的 s_sin 是一个非常贪玩的人 QAQ(如果你非常讨厌他请直接从第二段开 始看),并且令人感到非常遗憾的是,他是一 ...
- 数据结构与算法实验题 9.1 K 歌 DFS+剪枝
数据结构与算法实验题 K 歌 ★实验任务 3* n 个人(标号1~ 3 * n )分成 n 组 K 歌.有 m 个 3 人组合,每个组合都对应一个分数,你能算出最大能够得到的总分数么? ★数据输入 输 ...
随机推荐
- cmd 批处理制作
新建个记事本abc.txt,把下面的内容复制到记事本d:cd d:\a\b\cdir d:\a\b\ccmd复制完成后并保存,把文件的后缀名.txt改为.bat变成一个批处理即abc.bat
- iOS报错 -pie can only be used when targeting iOS 4.2 or later
近期,使用师兄的project时.突然报错之前没发现这个错误.信息例如以下: ld: -pie can only be used when targeting iOS 4.2 or later cla ...
- [NOI.AC#40]Erlang
链接 题解 显然,最多抽2个集合 如果一直抽一个,前提是该集合有重复的,答案是不同元素的个数+1 如果抽两个,那么最坏情况下,在一个集合中抽到某一个数的次数是这个集合不同元素的个数(因为抽不到重复的) ...
- linux/unix 基本概念的认识(sha-bang 、PPA)
PPA:Personal Package Archives : Ubuntu: 比如为安装 emacs,需要首先添加某个PPA: sudo add-apt-repository ppa:cassou/ ...
- IAR FOR STM8 学习笔记 IAR工程的建立
STM8是ST意法半导体针对工业应用和消费电子开发而推出的8位单片机. 每种MCU都有自身的优点与缺点,与其它8-bit MCU相比,STM8 8-bit MCU最大的特点是: · 内核: o 最高f ...
- javascript类型系统之基本数据类型与包装类型
javascript的数据类型可以分为两种:原始类型和引用类型 原始类型也称为基本类型或简单类型,因为其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈(stack)中(按值访问) ...
- Chrome 好用的扩展程序
1. 谷歌访问助手.见名知意. 2. ColorZilla.方便的拾色器和取色器. 3. Restlet Client.方便测试接口. 4. Vue Devtools.Vue项目开发利器. 5. Ta ...
- Shiro学习总结(3)——Apache Shiro身份认证
身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...
- 阶段复习-.NET下托管资源与非托管资源的小记
托管资源由由程序员负责分配,在系统的二级缓存中,GC自动回收释放:而非托管资源也是由程序员负责分配,资源的释放回收也是由程序员负责,使用Dispose或者析构函数对资源进行回收,常见的非托管资源是包装 ...
- enq: TX - row lock contention故障处理一则
一个非常easy的问题,之所以让我对这个问题进行总结.一是由于没我想象的简单,在处理的过程中遇到了一些磕磕碰碰,甚至绕了一些弯路.二是引发了我对故障处理时的一些思考. 6月19日,下午5点左右.数据库 ...