【力扣】[热题 HOT100] 101.对称二叉树
发布日期:2021-05-10 06:34:00 浏览次数:17 分类:精选文章

本文共 1438 字,大约阅读时间需要 4 分钟。

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

  • 题目 检查一个二叉树是否是镜像对称的。镜像对称意味着左子树和右子树在结构和节点值上完全对称。例如,左子树的一个节点的左和右子树应与右子树的一个节点的右和左子树对应位置一致。

  • 分析思路 两种主要方法:递归和迭代,可以解决这个问题。

    • 递归方法

    • 检查左右两节点都为空,返回true。
    • 检查是否两节点同时存在,否则返回false。
    • 比较当前节点值,左值等于右值,否则返回false。
    • 递归检查左子树的左和右子树的右,右子树的左和左子树的右。
    • 迭代方法

    • 使用双端队列处理每对节点。
    • 取出两节点,检查值是否相同,否则返回false。
    • 将左子树右和右子树左交换入队,直到队列处理完毕。
    1. 代码示例
      • 递归实现
      class Solution {
      public boolean check(TreeNode left, TreeNode right) {
      if (left == null && right == null) return true;
      if (left == null || right == null) return false;
      return left.val == right.val &&
      check(left.left, right.right) &&
      check(left.right, right.left);
      }
      public boolean isSymmetric(TreeNode root) {
      return check(root, root);
      }
      }
      • 迭代实现
      class Solution {
      public boolean check(TreeNode u, TreeNode v) {
      Queue
      q = new LinkedList<>();
      q.add(u);
      q.add(v);
      while (!q.isEmpty()) {
      TreeNode a = q.poll();
      TreeNode b = q.poll();
      if (a == null && b == null) continue;
      if (a == null || b == null || a.val != b.val) return false;
      q.add(a.left);
      q.add(b.right);
      q.add(a.right);
      q.add(b.left);
      }
      return true;
      }
      public boolean isSymmetric(TreeNode root) {
      return check(root, root);
      }
      }
      1. 总结 镜像对称不仅检查节点值相同,结构上也需对称。递归和迭代均可解决,但迭代方法在大树处理上更稳健。缺乏节点或结构不对称时,必返回false,基线条件处理至关重要。
    上一篇:【力扣】[热题 HOT100] 102.二叉树的层序遍历
    下一篇:【力扣】[热题 HOT100] 98.验证二叉搜索树

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月19日 22时58分33秒