墨风如雪博客

  • 源码小店
  • 导航站
  • 登录
  • java
  • 资源分享
让AI使用变得如此简单
  1. 首页
  2. 算法
  3. 正文

每日一道算法题:判断对称二叉树

2023年 7月 23日 89点热度 0人点赞 0条评论

题目描述

给定一棵二叉树,判断是否是对称二叉树。

解题思路

定义对称二叉树

对称二叉树是指一个二叉树的左右两个子树镜像对称。

递归解法

从根节点开始,判断左右子树是否对称,判断方法是比较左右子树的根节点值是否相等,然后分别递归判断左子树的左子树和右子树的右子树是否对称,左子树的右子树和右子树的左子树是否对称。

非递归解法

使用队列辅助遍历二叉树,每次将左右节点按照对称的方式加入队列中,再逐个比较是否对称。

代码实现

递归解法代码

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

private boolean isSymmetric(TreeNode left, TreeNode right) {
    if (left == null && right == null) {
        return true;
    }
    if (left == null || right == null || left.val != right.val) {
        return false;
    }
    return isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);
}

非递归解法代码

public boolean isSymmetric(TreeNode root) {
    if (root == null) {
        return true;
    }
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root.left);
    queue.offer(root.right);
    while (!queue.isEmpty()) {
        TreeNode left = queue.poll();
        TreeNode right = queue.poll();
        if (left == null && right == null) {
            continue;
        }
        if (left == null || right == null || left.val != right.val) {
            return false;
        }
        queue.offer(left.left);
        queue.offer(right.right);
        queue.offer(left.right);
        queue.offer(right.left);
    }
    return true;
}

时间复杂度

递归解法的时间复杂度为O(n),非递归解法的时间复杂度为O(n),其中n为树的节点数。

空间复杂度

递归解法的空间复杂度为O(n),非递归解法的空间复杂度为O(n),其中n为树的节点数。

边界条件处理

当树为空时,判断为对称二叉树。

测试用例

输入:

    1
   / \
  2   2
 / \ / \
3  4 4  3

输出:true

输入:

    1
   / \
  2   2
   \   \
   3    3

输出:false

扩展点

对称二叉树图像的翻转

对于一棵对称二叉树,将其左右子树交换位置后得到的二叉树与原二叉树是镜像对称的。

对称二叉树的遍历

前序遍历:根-左-右,左右子树按照对称顺序遍历

中序遍历:左-根-右,左右子树按照对称顺序遍历

后序遍历:左-右-根,左右子树按照对称顺序遍历

总结

总结解题思路

本题可以使用递归和非递归两种方式解决。递归方式就是比较左右子树是否对称,如果对称则继续递归比较左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树是否对称。非递归方式需要使用队列辅助,每次将左右节点按照对称的方式加入队列中,再逐个比较是否对称。

总结时间复杂度和空间复杂度

递归解法和非递归解法的时间复杂度和空间复杂度都是O(n),其中n为树的节点数。

总结对称二叉树的应用场景

对称二叉树是一种常见数据结构,其应用场景可以是二叉树镜像的问题,判断两棵树是否相同的问题等等。在算法中也有一些与对称二叉树相关的问题,例如二叉树的最大深度、路径总和等。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: java 二叉树 动态规划 数组 算法
最后更新:2023年 6月 23日

墨风如雪

一个热爱生活,热爱分享的程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

墨风如雪

一个热爱生活,热爱分享的程序员

最新 热点 随机
最新 热点 随机
告别机械感!OpenAudio S1让AI声音活起来 Sora触手可及!微软必应AI视频生成器,全民创作时代来临? 阿里WebAgent开源:引领自主搜索新纪元 重磅炸弹!字节跳动开源BAGEL:70亿参数,统一多模态理解与生成,AI“全能王”诞生记! 小米MiMo-VL:7B参数,怎么就成了多模态界的“越级打怪王”? 炸裂!DeepSeek 8B 量化版降临:告别显存焦虑,你的 3080 Ti 也能玩转顶级大模型了!
ComfyUI“打通任督二脉”:直接调用Veo2、GPT-4o等65大模型!一键串联你的AI工作流AI圈炸锅了!Mistral Medium 3:性能 SOTA,成本打骨折,企业玩家的新宠?字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器告别“微信黑箱”!Chatlog:让你的聊天记录也能拥有“AI大脑”!字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码?85倍速的视觉革命:苹果发布 FastVLM,让你的 iPhone ‘看图说话’,快到飞起!
重新安装功能强大的Linux服务器系统:一键重装脚本 无缝衔接设备跨平台本地AI好助手:OllamaTalk 部署教程与深度解析 每日算法题:字符串转换整数(atoi) CentOS7 防火墙(firewall)的操作命令 深度解析 OpenAI Academy:官方下场,AI 学习迎来新基准? java IOC框架Google Guice的(超详细总结)
标签聚合
动态规划 java 教程 spring 算法 deepseek AI 设计模式

COPYRIGHT © 2023 墨风如雪博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策