LeetCode:对称二叉树

1、题目描述

给你一个二叉树的根节点 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

进阶:你可以运用递归和迭代两种方法解决这个问题吗?

2、方法1:递归法

解题思路

递归法通过比较左右子树的对称性来判断整棵树是否对称。

步骤:

  1. 终止条件

    • 左右节点均为 null,返回 true

    • 左右节点有一个为 null,返回 false

    • 左右节点值不相等,返回 false

  2. 递归比较

    • 比较左子树的左节点与右子树的右节点。

    • 比较左子树的右节点与右子树的左节点。

  3. 返回结果:上述两个比较结果必须同时为 true

时间复杂度:O(n),空间复杂度:O(n) (调用栈)

public boolean isSymmetric(TreeNode root) {
    if (root == null) return true;
    return isMirror(root.left, root.right);
}

private boolean isMirror(TreeNode l, TreeNode r) {
    if (l == null && r == null) return true;  // 均为空
    if (l == null || r == null) return false; // 一个为空
    if (l.val != r.val) return false;         // 值不相等
    return isMirror(l.left, r.right) && isMirror(l.right, r.left); // 递归比较
}

3、方法2:迭代法

解题思路

迭代法通过队列按层比较左右子树的对称性。

步骤:

  1. 初始化:将根节点的左右子节点入队。

  2. 循环处理队列

    • 每次取出两个节点(左子树的节点和右子树的节点)。

    • 检查是否均为 null,是则跳过。

    • 检查是否一个为 null 或值不相等,是则返回 false

    • 将左子树的左节点与右子树的右节点入队(比较外侧)。

    • 将左子树的右节点与右子树的左节点入队(比较内侧)。

  3. 返回结果:队列为空时未发现不对称,返回 true

时间复杂度:O(n),空间复杂度:O(n) (栈空间)

public boolean isSymmetric(TreeNode root) {
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root.left);
    queue.offer(root.right);
    while (!queue.isEmpty()) {
        TreeNode u = queue.poll();
        TreeNode v = queue.poll();
        if (u == null && v == null) continue;       // 均为空
        if (u == null || v == null) return false;   // 一个为空
        if (u.val != v.val) return false;           // 值不相等
        queue.offer(u.left);  // 左子树的左节点
        queue.offer(v.right); // 右子树的右节点
        queue.offer(u.right); // 左子树的右节点
        queue.offer(v.left);  // 右子树的左节点
    }
    return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值