对称二叉树

本文介绍了一种通过输入顺序结构来判断二叉树是否对称的方法,并提供了一个简单的C++实现。对于输入的字符串,该算法检查每个节点的左右子树是否同时存在或不存在,以此判断整个二叉树是否对称。

题目描述

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值