HDU 3791 二叉搜索树

传送门

题目大意

判断两序列是否为同一二叉搜索树序列

思路

直接暴力找,如果这个数大于他就是左孩子,否则就是右孩子

代码

int main(){
	char s[20];
	int tree[550],tree1[550];
	int n;
	while(cin>>n){
		if(n==0)break;
		scanf("%s",s);
		memset(tree,-1,sizeof tree);
		for(int i=0;s[i];i++){
			int c=s[i]-'0';
			int j=1;
			while(tree[j]!=-1){
				if(c>tree[j])
				j=j*2+1;
				else
				j=j*2;
			}
			tree[j]=c;
		}
		while(n--){
			scanf("%s",s);
			memset(tree1,-1,sizeof tree1);
			for(int i=0;s[i];i++){
				int j=1;
				int c=s[i]-'0';
				while(tree1[j]!=-1){
					if(c>tree1[j])
					j=j*2+1;
					else
					j=j*2;
				}
				tree1[j]=c;
			}
			int flag=1;
			for(int i=1;i<=512;i++){
				if(tree[i]!=tree1[i]){
					flag=0;
					puts("NO");
					break;
				}
			}
			if(flag){
				puts("YES");
			}
		}
	}
}
上一篇:睿智错误


下一篇:#10108. 「一本通 3.7 练习 2」Ant Trip