题目描述
如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.例:如下图中的二叉树T1是对称的,T2是不对称的。
二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。
输入
输入二叉树的顺序结构(#表示空格)
输出
如果二叉树是对称的,输出“Yes”,反之输出“No”
样例输入
ABCDE
样例输出
Yes
我的思路:
这是二叉树,根据题意得:两棵子树皆为空,或者皆不空,则称该二叉树即是对称的。所以输入的字符串中,第一位为二叉树的根,接下去每两位为一个节点的左右子树,只要这两位都不为‘#’ 或者都为‘#’即为对称。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
int i;
for(i=1;i<s.length();i+=2){
if(s[i]!='#' && s[i+1]=='#' || s[i+1]!='#' && s[i]=='#' ||s[i+1]=='\0'){
//判断是否对称,如果有不满足条件的,即为不对称,输出“NO”并退出
printf("No\n");
break;
}
}
if(i>=s.length())printf("Yes\n");//如果没有中途退出,则说明都满足条件,该二叉树对称输出“Yes”
return 0;
}