1368:对称二叉树(tree_c)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 6129 通过数: 2346
【题目描述】
如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.
例:如下图中的二叉树T1是对称的,T2是不对称的。
二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。
【输入】
二叉树用顺序结构给出,若读到#则为空。
【输出】
如果二叉树是对称的,输出“Yes”,反之输出“No”。
【输入样例】
ABCDE
【输出样例】
Yes
#include<iostream>
using namespace std;
int main()
{
string s;
int i,j,k,n,m;bool t=1;
cin>>s;n=s.size();
if(n%2==0)
//如果节点为偶数,那么去除根节点后就剩下奇数个,不满足两颗子树皆空或皆不空
{
cout<<"No"<<endl;
return 0;
}
for(i=1;i<n;i+=2)
//判断每对同一结点的子结点,从第二个开始
if((s[i]=='#'&&s[i+1]!='#')||(s[i+1]=='#'&&s[i]!='#'))t=0;
//给出的顺序中,同一个节点的子节点是相邻的
//如果其中恰好有一个是空的,就不是对称二叉树
if(t)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}