对称的二叉树

题目描述

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
对称的二叉树_第1张图片

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

对称的二叉树_第2张图片

示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false

算法思想

若树只有一个根节点,则此时为对称二叉树;
当左子树和右子树完全相等时,为对称二叉树;
只要有一项不满足,则不是对称二叉树。
只有左左和右右镜像且左右和右左镜像的时候,我们才能说这两棵树是镜像的。

代码实现

class Solution {
public:
    bool check(TreeNode *p, TreeNode *q) {
        if (!p && !q) return true;
        if (!p || !q) return false;
        return p->val == q->val && check(p->left, q->right) && check(p->right, q->left);
    }
    bool isSymmetric(TreeNode* root) {
        return check(root, root);
    }
};

你可能感兴趣的:(LeetCode,算法)