- https://leetcode.cn/problems/symmetric-tree/
- 给你一个二叉树的根节点 root , 检查它是否轴对称。
- 对称二叉树是指镜像对称的二叉树,即左子树和右子树完全相同。判断一棵二叉树是否为对称二叉树,可以采用递归的方法进行求解。具体步骤如下:
-
定义一个递归函数,传入两个参数,分别表示左子树和右子树。
-
如果左子树和右子树都为空,返回 true。
-
如果左子树和右子树其中一个为空,返回 false。
-
如果左子树和右子树的根节点值不相同,返回 false。
-
递归判断左子树的左子树和右子树的右子树是否对称,以及左子树的右子树和右子树的左子树是否对称,如果有一个不对称,返回 false。
-
如果左子树和右子树都对称,返回 true。
code
递归函数的代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool judgeSymmetric(TreeNode* left, TreeNode* right) {
if (left == nullptr && right == nullptr) {
return true;
}
if (left == nullptr || right == nullptr) {
return false;
}
if (left->val != right->val) {
return false;
}
return judgeSymmetric(left->left, right->right) && judgeSymmetric(left->right, right->left);
}
bool isSymmetric(TreeNode* root) {
if (root == nullptr) {
return true;
}
return judgeSymmetric(root->left,root->right);
}
};