题目
给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false提示:
树中节点数目在范围 [1, 1000] 内
-100 <= Node.val <= 100
思考
- 由轴对称,我们可以将这颗二叉树分为左右两颗树进行比较
- 进行递归比较,当最终比较成功时,应该同时越过叶子节点,也就是节点同时为空
- 比较失败的情况有:不同时越过叶子节点或者比较的节点的值不相同
- 递归传入的参数为子树A 的左节点与 子树B 的右节点比较,子树A 的右节点与 子树B 的左节点比较
解法1:递归
/**
* 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 compare(TreeNode* a, TreeNode* b){
if(!a && !b) return true;
if(!a || !b || a->val != b->val) return false;
return compare(a->left, b->right) && compare(a->right, b->left);
}
bool isSymmetric(TreeNode* root) {
return compare(root->left, root->right);
}
};