【二叉树】对称二叉树 如果二叉树的左右子树的结构是对称的,即两棵子树皆为空,或者皆不空,则称该二叉树是对称的。编程判断给定的二叉树是否对称。 例:如下图中的二叉树T1是对称的,T2是不对称的。 二叉树用顺序结构给出,若读到#则为空,二叉树T1=ABCDE,T2=ABCD#E,如果二叉树是对称的,输出“Yes”,反之输出“No”。 输入说明: 一行字符串,表示二叉树的顺序存储序列,用字符#代表空结点,长度不大于1000。 输入说明: 如果二叉树是对称的,输出“Yes”,反之输出“No”。 输入示例: ABCDE 输出示例: Yes。以此写一段cpp代码
时间: 2024-02-28 16:54:40 浏览: 97
以下是一段C++代码,用来判断给定的二叉树是否对称:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1010;
char tree[MAXN];
bool isSymmetric(char* left, char* right) {
if (*left == '#' && *right == '#') { // 左右子树都为空
return true;
}
if (*left == '#' || *right == '#') { // 左右子树一个为空,一个不为空
return false;
}
if (*left != *right) { // 左右子树根节点不同
return false;
}
return isSymmetric(left + 1, right - 1); // 递归判断左右子树是否对称
}
int main() {
cin >> tree;
int len = strlen(tree);
if (len % 2 == 0) { // 如果字符串长度为偶数,肯定不对称
cout << "No" << endl;
return 0;
}
char* left = tree + 1;
char* right = tree + len - 2;
if (isSymmetric(left, right)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
```
该程序首先读入二叉树的顺序存储序列,然后判断字符串长度是否为偶数。如果字符串长度为偶数,肯定不对称,直接输出"No"。否则,定义指针left指向字符串的第2个字符,指针right指向字符串的倒数第2个字符,然后调用isSymmetric函数来判断左右子树是否对称。isSymmetric函数的实现比较简单:如果左右子树都为空,返回true;如果左右子树一个为空,一个不为空,返回false;如果左右子树根节点不同,返回false;否则,递归判断左右子树是否对称。最终,如果二叉树对称,输出"Yes",否则输出"No"。
阅读全文