对称二叉树(tree_c)
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1368
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.
例:如下图中的二叉树T1是对称的,T2是不对称的。
二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。
【输入】
二叉树用顺序结构给出,若读到#则为空。
【输出】
如果二叉树是对称的,输出“Yes”,反之输出“No”。
【输入样例】
ABCDE
【输出样例】
Yes
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { string s; cin>>s; int k=1,i=0,flag=0,j=1,l=s.size()-1; while(k*2<=l&&!flag) { k*=2; l-=k; for(;j<=i+k;j+=2) { if(s[j]==‘#‘&&s[j+1]!=‘#‘)flag=1; if(s[j]!=‘#‘&&s[j+1]==‘#‘)flag=1; } i=j; } if((s.size()-j)%2)flag=1; else for(;j<s.size();j+=2) { if(s[j]==‘#‘&&s[j+1]!=‘#‘)flag=1; if(s[j]!=‘#‘&&s[j+1]==‘#‘)flag=1; } if(flag)cout<<"No"<<endl; else cout<<"Yes"<<endl; }
时间: 2024-11-02 09:00:02