http://acm.hdu.edu.cn/showproblem.php?pid=3791&&二叉搜索树
2012-07-09 18:31
513 查看
[align=left]Problem Description[/align]
判断两序列是否为同一二叉搜索树序列
[align=left]Input[/align]
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
[align=left]Output[/align]
如果序列相同则输出YES,否则输出NO
[align=left]Sample Input[/align]
2
567432
543267
576342
0
[align=left]Sample Output[/align]
YES
NO解题思路:二叉搜索树,又称为二叉排序树,其性质:通过对二叉排序树的中序遍历,即得到从小到大排列。在建树的过程中进行比较,一旦不相等就结束。AC代码:
判断两序列是否为同一二叉搜索树序列
[align=left]Input[/align]
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
[align=left]Output[/align]
如果序列相同则输出YES,否则输出NO
[align=left]Sample Input[/align]
2
567432
543267
576342
0
[align=left]Sample Output[/align]
YES
NO解题思路:二叉搜索树,又称为二叉排序树,其性质:通过对二叉排序树的中序遍历,即得到从小到大排列。在建树的过程中进行比较,一旦不相等就结束。AC代码:
#include<iostream> #include<string.h> #include<string> #include<memory.h> #define CLR(arr,val) memset(arr,val,sizeof(arr)) #define N 2<<11//注意易错点 using namespace std; char s ; char _s ; char s1 ; int flag; void Build(char ch,int pos,int ans) { if(_s[pos]==-1) { _s[pos]=ch; if(ans) if(ch!=s[pos]) flag=false; return; } if(ch>_s[pos]) Build(ch,pos<<1 | 1,ans); else Build(ch,pos<<1,ans); } void solve(bool ans) { flag=true; for(int i=0;i<strlen(s1);++i) { if(!flag) return; Build(s1[i],1,ans); } } int main() { int n; while(~scanf("%d",&n),n) { CLR(_s,-1); scanf("%s",s1); int len=strlen(s1); solve(0); memcpy(s,_s,strlen(_s));// for(int i=0;i!=n;++i) { CLR(_s,-1); scanf("%s",s1); int res=strlen(s1); if(res!=len) { puts("NO"); continue; } solve(1); if(flag) puts("YES"); else puts("NO"); } }return 0; }
相关文章推荐
- http://acm.hdu.edu.cn/showproblem.php?pid=2642&&二维树状数组
- http://acm.hdu.edu.cn/showproblem.php?pid=2838&&逆序数的应用
- http://acm.hdu.edu.cn/showproblem.php?pid=2586&&How far away ?
- HDU Today&&http://acm.hdu.edu.cn/showproblem.php?pid=2112
- http://acm.hdu.edu.cn/showproblem.php?pid=1248&&完全背包
- http://acm.hdu.edu.cn/showproblem.php?pid=1106&&排序
- Max Sum &&http://acm.hdu.edu.cn/showproblem.php?pid=1003
- http://acm.hdu.edu.cn/showproblem.php?pid=1055&&Color a Tree
- The 36th ACM/ICPC Asia Regional Beijing Site&&http://acm.hdu.edu.cn/showproblem.php?pid=4046
- 二分查找求函数的区间最小值&&http://acm.hdu.edu.cn/showproblem.php?pid=2899
- http://acm.hdu.edu.cn/showproblem.php?pid=3790&&最短路径问题
- Substrings &&http://acm.hdu.edu.cn/showproblem.php?pid=1238
- Hello Kiki&&http://acm.hdu.edu.cn/showproblem.php?pid=3579
- I NEED A OFFER! &&http://acm.hdu.edu.cn/showproblem.php?pid=1203
- To The Max &&http://acm.hdu.edu.cn/showproblem.php?pid=1081
- http://acm.hdu.edu.cn/showproblem.php?pid=3544&&Alice's Game
- Red and Black&&http://acm.hdu.edu.cn/showproblem.php?pid=1312
- http://acm.hdu.edu.cn/showproblem.php?pid=2066&&多源多点
- http://acm.hdu.edu.cn/showproblem.php?pid=2688&&树状数组求正序数
- http://acm.hdu.edu.cn/showproblem.php?pid=1171&&0-1&&多重背包混合