LeetCode算法系列 101. 对称二叉树

·  阅读 166
LeetCode算法系列 101. 对称二叉树

白菜Java自习室 涵盖核心知识

力扣原题

101. 对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
复制代码

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

    1
   / \
  2   2
   \   \
   3    3
复制代码

解题思路

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

如果同时满足下面的条件,两个树互为镜像:

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

显然,我们可以使用 递归实现

  1. 比较左右两棵子树的根节点的值是否相等;
  2. 比较左子树的左节点是否等于右子树的右节点;
  3. 比较左子树的右节点是否等于右子树的左节点。

递归何时结束

  1. 两个根节点中至少有一个为空时。
  2. 两个根节点的值不等时。

代码实现

class Solution {

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

    public boolean isSymmetric(TreeNode left, TreeNode right) {
        if (left == null && right == null) return true;
        if (left == null || right == null) return false;
        if (left.val != right.val) return false;
        return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
    }
    
}
复制代码

复杂度分析

  • 时间复杂度:这里遍历了这棵树,渐进时间复杂度为 O(n)O(n)

  • 空间复杂度:这里的空间复杂度和递归使用的栈空间有关,这里递归层数不超过 nn,故渐进空间复杂度为 O(n)O(n)

分类:
后端
标签:
分类:
后端
标签: