题目描述

      如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.例:如下图中的二叉树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;
}