当前位置: 首页 > news >正文

可视化图解算法:对称的二叉树(判断二叉树是否为对称的)

1. 题目

描述

给定一棵二叉树,判断其是否是自身的镜像(即:是否对称) 例如: 下面这棵二叉树是对称的

下面这棵二叉树不对称。

数据范围:节点数满足 0≤n≤1000,节点上的值满足∣val∣≤1000

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

备注:

你可以用递归和迭代两种方法解决这个问题。

示例1

输入:

{1,2,2,3,4,4,3}

返回值:

true
示例2

输入:

{1,2,2,#,3,#,3}

返回值:

false
示例3

输入:

{8,6,9,5,7,7,5}

返回值:

false

2. 解题思路

判断一颗二叉树是否对称可以采用以下方法:

  1. 将二叉树复制一份

  1. 对2颗二叉树进行比较(采用递归方法)

    树1的左子树与树2的右子树进行比较;

    树1的右子树与树1的左子树进行比较;

    当比较结果都为true时,二叉树为对称的二叉树。

假如要判断的二叉树结构如下图所示:

这样一颗二叉树进行复制,会变成两颗完全一样的二叉树:

先来看看该二叉树是否可以通过递归来判断对称性。

递归的两个条件满足,因此可以通过递归来判断二叉树是否为对称。

对于这两颗二叉树来说,先判断两颗二叉树的节点值是否相等(root1.val是否等于root2.val);再用树1的左子树与树2的右子树进行比较,用树1的右子树与树1的左子树进行比较。因此对应的递推公式如下所示:

有了递推公式,就可以方便的写出对应的代码了。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1371871

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367112

  • Golang版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364652

3. 编码实现

核心代码如下:

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param pRoot TreeNode类* @return bool布尔型*/
func isSymmetrical(pRoot *TreeNode) bool {// write code herereturn recursion(pRoot, pRoot)
}func recursion(root1 *TreeNode, root2 *TreeNode) bool {// 2. 递归终止条件// 2.1 递归条件:两个节点都为空,为trueif root1 == nil && root2 == nil {return true}// 2.2 只有一个节点为空,必定不对称if (root1 == nil && root2 != nil) || (root1 != nil && root2 == nil) {return false}// 1. 问题分解(递推公式)return (root1.Val == root2.Val) && recursion(root1.Left, root2.Right) && recursion(root1.Right, root2.Left)
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1371871

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367112

  • Golang版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364652

4.小结

判断二叉树是否为对称,可以采用以下方法:将二叉树复制一份;对2颗二叉树进行比较(采用递归方法),树1的左子树与树2的右子树进行比较,树1的右子树与树1的左子树进行比较,当比较结果都为true时,二叉树为对称的二叉树。

《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:

        ✅ 链表

        ✅ 二叉树

        ✅二分查找、排序

        ✅ 堆、栈、队列

        ✅回溯算法

        ✅ 哈希算法

        ✅ 动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:数据结构笔试面试算法-Python语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Python语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ss897667807

  • Java编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ss161443488

  • Golang编码实现:数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ss63997

对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:不似春光,胜似春光,寥廓江天万里霜。

相关文章:

  • 企业如何构建一个全面的Web安全防护体系
  • AVL树的介绍与学习
  • 【Pandas】pandas DataFrame rfloordiv
  • Python对比两张CAD图并标记差异的解决方案
  • 软件功能设计视角下的能源管理系统功能清单构建与实践
  • LeetCode -- Flora -- edit 2025-04-27
  • PostSwigger Web 安全学习:CSRF漏洞2
  • SpringMVC框架
  • Linux中的31个普通信号
  • Redis03-基础-C#客户端
  • Javase 基础入门 —— 06 final + 单例
  • 数据库MySQL学习——day6(多表查询(JOIN)基础)
  • uni-app 中使用 mqtt.js 的完整版
  • 关于百度模型迭代个人见解:技术竞速下的应用价值守恒定律
  • Maven 使用教程
  • 图像生成新势力:GPT-Image-1 与 GPT-4o 在智创聚合 API 的较量
  • 码蹄杯——tips
  • 龙芯远程方案
  • 常用的多传感器数据融合方法
  • 衡石科技:HENGSHI SENSE 数据权限解决方案
  • 苏丹宣布与阿联酋断交
  • 机器人助力、入境游、演出引流:假期纳客千万人次城市有高招
  • 马斯克的胜利?OpenAI迫于压力放弃营利性转型计划
  • 世界哮喘日丨张旻:哮喘的整体诊断率不足三成,吸入治疗是重要治疗手段
  • 长线游、县域游、主题游等持续升温,假期文旅市场供需两旺
  • 旧宫新语|瑞琦:再探《古玩图》——清宫艺术品的前世与今生