描述
如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.
例:如下图中的二叉树T1是对称的,T2是不对称的。
二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。
输入描述
二叉树用顺序结构给出,若读到#则为空。
输出描述
如果二叉树是对称的,输出“Yes”,反之输出“No”。
用例输入 1
ABCDE
用例输出 1
Yes
思路:判断二叉树只有一个根节点,则对称:
if (a.size()==1)
{
cout<<"Yes";
}
二叉树长度为偶数,则不对称:
else if (a.size()%2==0)
{
cout<<"No";
}
再加上循环判断就可以了:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin>>a;
if (a.size()==1)
{
cout<<"Yes";
return 0;
}
else if (a.size()%2==0)
{
cout<<"No";
return 0;
}
for (int i=1;i<=a.size();i+=2)
{
if((a[i]=='#' && a[i+1]!='#') || (a[i]!='#'&& a[i]=='#'))
{
cout<<"No";
return 0;
}
}
cout<<"Yes";
}