【题目描述】

如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称.

例:如下图中的二叉树T1是对称的,T2是不对称的。

二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。

【输入】

二叉树用顺序结构给出,若读到#则为空。

【输出】

如果二叉树是对称的,输出“Yes”,反之输出“No”。

【输入样例】

ABCDE

【输出样例】

Yes
#include <iostream>
using namespace std;
int tre[5000];
string a;
int main(){
    cin>>a;
    if(a.size()<=1){//只有一个节点或没有节点就一定是对称的
        cout<<"Yes";
        return 0;
    }
    else{
        for(int i=0;i<a.size();i++){//给二叉树顺序赋值
            if(a[i]!='#') tre[i+1]=1;//如果不为空就赋值为1
            else tre[i+1]=0;//如果为空就赋值为0
        }
        //判断是否对称 注意这里要是小于等于,而不能是小于
        //因为当二叉树长度为偶数时,要判断最后一个节点是否为空,不为空就会被剩下落单,就一定不是对称的
        for(int i=2;i<=a.size();i=i+2){
            if(tre[i]!=tre[i+1]){
                cout<<"No";
                return 0;
            }
        }
        cout<<"Yes";
    }
}

更多推荐