LeetCode 101. 对称二叉树

欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 101. 对称二叉树,做好准备了么,那么开始吧。

一、题目名称

LeetCode 101. 对称二叉树

二、题目要求

给你一个二叉树的根节点 root , 检查它是否轴对称。

三、相应举例

示例 1:

LeetCode 101. 对称二叉树_第1张图片


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

LeetCode 101. 对称二叉树_第2张图片


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

四、限制要求

  • 树中节点数目在范围 [1, 1000] 内
  • -100 <= Node.val <= 100

五、解决办法

递归

如果一个树的左子树与右子树镜像对称,那么这个树是对称的。

如果同时满足下面的条件,两个树互相对称:

  • 它们的两个根结点具有相同的值
  • 每个树的右子树都与另一个树的左子树镜像对称

我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。

六、代码实现

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root, root);
    }

    public boolean check(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        }
        if (p == null || q == null) {
            return false;
        }
        return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
    }
}

 LeetCode 101. 对称二叉树_第3张图片

 LeetCode 101. 对称二叉树_第4张图片

 

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)