题目链接:101. 对称二叉树 - 力扣(Leetcode)
ps:这应该算作中等题吧?(可能是我太菜了....学不会的递归...啊吧啊吧..qwq)
树的问题,一般可以采用递归的方法来做。因此我们采用递归
题目分析:我们得分为两步解决这个问题:1:是否对称 2:是否对应值相等
1:是否对称:在递归的途中,因为要判断是否具有对称性,因此,我们从根开始递归。
如何判断对称性呢?根据样例一可以发现:图解
2:是否对应值相同:这个很简单,只需要:p->val==q->val
由以上可写得代码:
/**
* 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 check(TreeNode*p,TreeNode*q){
if(!p&&!q) return true;
if(!p||!q) return false;
if(p->val==q->val&&check(p->left,q->right)&&check(p->right,q->left)) return true;
return false;
}
bool isSymmetric(TreeNode* root) {
if(root==nullptr) return true;
return check(root, root);
}
};