传送门: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的更多相关文章

  1. hdu 3791 二叉搜索树(数据结构)

    二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. hdu 3791:二叉搜索树(数据结构,二叉搜索树 BST)

    二叉搜索树 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

  3. HDU 3791 二叉搜索树

    二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. HDU 3791 二叉搜索树 题解

    Problem Description 推断两序列是否为同一二叉搜索树序列   Input 開始一个数n,(1<=n<=20) 表示有n个须要推断,n= 0 的时候输入结束. 接下去一行是 ...

  5. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

  6. 70 数组的Kmin算法和二叉搜索树的Kmin算法对比

    [本文链接] http://www.cnblogs.com/hellogiser/p/kmin-of-array-vs-kmin-of-bst.html [分析] 数组的Kmin算法和二叉搜索树的Km ...

  7. 数据结构与算法实验题 4.2 Who is the strongest

    数据结构与算法实验题 4.2 Who is the strongest ★实验任务 在神奇的魔法世界,召唤师召唤了一群的魁偶.这些魁偶排成一排,每个魁偶都有一个 战斗值.现在该召唤师有一个技能,该技能 ...

  8. 数据结构与算法实验题 6.1 s_sin’s bonus

    数据结构与算法实验题 6.1 s_sin's bonus ★实验任务 正如你所知道的 s_sin 是一个非常贪玩的人 QAQ(如果你非常讨厌他请直接从第二段开 始看),并且令人感到非常遗憾的是,他是一 ...

  9. 数据结构与算法实验题 9.1 K 歌 DFS+剪枝

    数据结构与算法实验题 K 歌 ★实验任务 3* n 个人(标号1~ 3 * n )分成 n 组 K 歌.有 m 个 3 人组合,每个组合都对应一个分数,你能算出最大能够得到的总分数么? ★数据输入 输 ...

随机推荐

  1. (转)Linux下使用rsync最快速删除海量文件的方法

    转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...

  2. Robot Framework初步使用

    第一步,新建一个Project:

  3. [Javascript AST] 2. Introduction: Write a simple ESLint rule

    What we want to do is checking if user write nested if statements which actually can combine to one: ...

  4. 删除online日志測试及ora-600 [4194]错误的处理

    今天做了一个关于破坏online日志的恢复測试,主要三个场景: 測试1:正常关闭数据库后删除非当前日志 測试2:正常关库后.删除在线日志文件 測试3:非正常关闭数据库.并删除当前在线日志文件 我的測试 ...

  5. 3.十分钟读懂——App开发规范的业务流程

    转自:http://www.itdaan.com/blog/2017/12/08/6bc06b3387a8d1238504355a6a1c6743.html 一.主要流程   二.产品立项 工作概述: ...

  6. HTML基础第三讲---字体

    转自:https://i.cnblogs.com/posts?categoryid=1121494 同样我们在这里继续讲一下它的body,因为它能直观的让大家观察到你所学到的成果. 这一讲,我们来学习 ...

  7. 如何把excel同一个单元格内的文字和数字分别提取出来?

    平台:excel 2010 目的:把excel同一个单元格内的文字和数字分别提取出来 操作: 假设数据在A1单元格:如果文字在前,B1=left(A1,lenb(A1)-len(A1))可得文字,C1 ...

  8. js面向对象2--原型

    一.原型和原型对象 函数的原型prototype:函数才有prototype,prototype是一个对象,指向了当前构造函数的引用地址. 所有对象都有__proto__属性, 所有的__proto ...

  9. 学习笔记:Vue——动态组件&异步组件

    动态组件 01.在动态组件上使用keep-alive,保持组件的状态,以避免反复重渲染导致的性能问题. <!-- 失活的组件将会被缓存!--> <keep-alive> < ...

  10. 基于深度学习的目标检测(object detection)—— rcnn、fast-rcnn、faster-rcnn

    模型和方法: 在深度学习求解目标检测问题之前的主流 detection 方法是,DPM(Deformable parts models), 度量与评价: mAP:mean Average Precis ...