题目描述
假设一棵二叉树中每个结点的两棵子树都是空,或者都不为空,我们称该二叉树是对称二叉树。
给定一棵二叉树的字符串表示的结果,请编程判断,该二叉树是否是对称二叉树。
例如:下图所示的两棵二叉树中,T1是对称二叉树,T2不是对称二叉树。
二叉树用顺序结构给出,若读到#则该结点为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。
输入
一行字符串,表示二叉树的顺序存储序列,用字符#代表空结点,长度不大于1000。
输出
如果二叉树是对称的,输出“Yes”,反之输出“No”。
样例输入
ABCDE
样例输出
Yes 参考代码:
#include
using namespace std;
int a[1005];
string s;
bool f(int x){
if(a[x*2]==0&&a[x*2+1]==0)
return true;
else if(a[x*2]!=0&&a[x*2+1]!=0)
return f(x*2) && f(x*2+1);
else
return false;
}
int main(){
cin>>s;
for(int i=0;i
a[i+1]=1;
if(f(1))
cout<<"Yes";
else
cout<<"No";
return 0;
}