当前位置: 首页 > 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

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

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

http://www.dtcms.com/a/160089.html

相关文章:

  • 企业如何构建一个全面的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 数据权限解决方案
  • 从线性回归到逻辑回归
  • Spring XML 外部实体(XXE)指南:示例和预防
  • 使用XMLSpy校验xml是否合法
  • 强化学习中关键超参数的详细说明
  • vue2 开发一个实习管理系统电脑端-前端静态网站练习
  • 基于知识库的客户服务工具
  • Kubernetes学习笔记-环境变量的使用
  • 使用 Vue 3 开发桌面端应用的框架性能对比
  • 图神经网络(GNN)基本概念与核心原理
  • Qt中的全局函数讲解集合(全)