当前位置:网站首页>力扣练习——41 对称二叉树
力扣练习——41 对称二叉树
2022-08-02 04:18:00 【qq_43403657】
41 对称二叉树
1.问题描述
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
二叉树[1,2,2,null,3,3,null,5,-2,-2,5]是对称的。
1
/ \
2 2
\ /
3 3
/ \ / \
5 -2 -2 5
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
可使用以下main函数:
#include
#include
#include
#include
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(NULL), right(NULL) {}
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
TreeNode* inputTree()
{
int n,count=0;
char item[100];
cin>>n;
if (n==0)
return NULL;
cin>>item;
TreeNode* root = new TreeNode(atoi(item));
count++;
queue<TreeNode*> nodeQueue;
nodeQueue.push(root);
while (count<n)
{
TreeNode* node = nodeQueue.front();
nodeQueue.pop();
cin>>item;
count++;
if (strcmp(item,"null")!=0)
{
int leftNumber = atoi(item);
node->left = new TreeNode(leftNumber);
nodeQueue.push(node->left);
}
if (count==n)
break;
cin>>item;
count++;
if (strcmp(item,"null")!=0)
{
int rightNumber = atoi(item);
node->right = new TreeNode(rightNumber);
nodeQueue.push(node->right);
}
}
return root;
}
int main()
{
TreeNode* root;
root=inputTree();
bool res=Solution().isSymmetric(root);
cout<<(res?“true”:“false”);
}
2.输入说明
首先输入结点的数目n(注意,这里的结点包括题中的null空结点)
然后输入n个结点的数据,需要填充为空的结点,输入null。
3.输出说明
输出true或false
4.范例
输入
11
1 2 2 null 3 3 null 5 -2 -2 5
输出
true
5.代码
#include <iostream>
#include <queue>
#include <cstdlib>
#include <cstring>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(NULL), right(NULL) {
}
TreeNode(int x) : val(x), left(NULL), right(NULL) {
}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {
}
};
TreeNode* inputTree()
{
int n, count = 0;
char item[100];
cin >> n;
if (n == 0)
return NULL;
cin >> item;
TreeNode* root = new TreeNode(atoi(item));
count++;
queue<TreeNode*> nodeQueue;
nodeQueue.push(root);
while (count < n)
{
TreeNode* node = nodeQueue.front();
nodeQueue.pop();
cin >> item;
count++;
if (strcmp(item, "null") != 0)
{
int leftNumber = atoi(item);
node->left = new TreeNode(leftNumber);
nodeQueue.push(node->left);
}
if (count == n)
break;
cin >> item;
count++;
if (strcmp(item, "null") != 0)
{
int rightNumber = atoi(item);
node->right = new TreeNode(rightNumber);
nodeQueue.push(node->right);
}
}
return root;
}
bool cmp(TreeNode *tree1, TreeNode *tree2)
{
//1.两棵树均为空
if (tree1 == NULL && tree2 == NULL)
return true;
//2.有一棵树非空或者两个根节点值不相等
if (tree1 == NULL || tree2 == NULL || tree1->val != tree2->val)
return false;
//3.比较左子树的右节点和右子树的左节点,左子树的左节点和右子树的右节点
return cmp(tree1->left, tree2->right) && cmp(tree1->right, tree2->left);
}
bool isSymmetric(TreeNode *root)
{
//1.树为空
if (root == NULL)
return true;
//2.判断左右子树
return cmp(root->left, root->right);
}
int main()
{
TreeNode* root;
root = inputTree();
bool res = isSymmetric(root);
cout << (res ? "true" : "false")<<endl;
}
边栏推荐
猜你喜欢
Minecraft 1.18.1、1.18.2模组开发 23.3D动画盔甲制作
A practice arrangement about map GIS (below) GIS practice of Redis
C语言:结构体总结
PyQt5_pyqtgraph鼠标在折线图上画直线
JDBC再回顾
Go 语言是如何实现切片扩容的?【slice】
PDF文件转换格式
Visual SLAM Lecture Fourteen - Lecture 13 Practice: Designing a SLAM system (the most detailed code debugging and running steps)
alibaba数据同步组件canal的实践整理
不会多线程还想进 BAT?精选 19 道多线程面试题,有答案边看边学
随机推荐
高等数学(第七版)同济大学 总习题三(后10题) 个人解答
gergovia的交易tijie
JDBC再回顾
P1012 [NOIP1998 提高组] 拼数
数据复制系统设计(3)-配置新的从节点及故障切换
HyperLynx中层叠设计实例
A practice arrangement about map GIS (below) GIS practice of Redis
8月1日“海豹数藏”将全网首发民族英雄林则徐《四行行书》数字藏品!
ROS visualization of 3D target detection
Research Notes (8) Deep Learning and Its Application in WiFi Human Perception (Part 2)
Go 语言是如何实现切片扩容的?【slice】
“数字化重构系统,搞定 CEO 是第一步”
【每日一题】1374. 生成每种字符都是奇数个的字符串
Deep Blue Academy-Visual SLAM Lecture 14-Chapter 6 Homework
热爱责任担当
(一)代码输出题 —— reverse
Deep blue college - handwritten VIO operations - the first chapter
【STM32】ADC采集光敏数据(不看库函数手册进行配置)
UI自动化测试框架搭建——标记性能较差用例
关于地图GIS开发事项的一次实践整理(上)