__101对称二叉树------进阶:你可以运用递归和迭代两种方法解决这个问题吗?---本题还没用【迭代】去实现

news/2024/10/18 6:03:28/

101对称二叉树

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:

原题链接:

101. 对称二叉树
https://leetcode.cn/problems/symmetric-tree/

完成情况:

在这里插入图片描述

解题思路:

递归的难点在于:找到可以递归的点 为什么很多人觉得递归一看就会,一写就废。 或者说是自己写无法写出来,关键就是你对递归理解的深不深。

对于此题: 递归的点怎么找?从拿到题的第一时间开始,思路如下:

1.怎么判断一棵树是不是对称二叉树? 答案:如果所给根节点,为空,那么是对称。如果不为空的话,当他的左子树与右子树对称时,他对称

2.那么怎么知道左子树与右子树对不对称呢?在这我直接叫为左树和右树 答案:如果左树的左孩子与右树的右孩子对称,左树的右孩子与右树的左孩子对称,那么这个左树和右树就对称。

仔细读这句话,是不是有点绕?怎么感觉有一个功能A我想实现,但我去实现A的时候又要用到A实现后的功能呢?

当你思考到这里的时候,递归点已经出现了: 递归点:我在尝试判断左树与右树对称的条件时,发现其跟两树的孩子的对称情况有关系。

想到这里,你不必有太多疑问,上手去按思路写代码,函数A(左树,右树)功能是返回是否对称

def 函数A(左树,右树): 左树节点值等于右树节点值 且 函数A(左树的左子树,右树的右子树),函数A(左树的右子树,右树的左子树)均为真 才返回真

实现完毕。。。

写着写着。。。你就发现你写出来了。。。。。。

最后一些小细节,在代码里有注解出来,大家参考时,可以注意一下

参考代码:

package 西湖算法题解;public class __101对称二叉树 {public static void main(String[] args) {}public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}// public class TreeNodepublic boolean isSymmetric(TreeNode root) {//1.递归判断if (root==null){return true;}return CompareIsSymmetric(root.left,root.right);}private boolean CompareIsSymmetric(TreeNode left, TreeNode right) {//全空则为trueif (left==null && right==null){return true;}//一个为空,另一个不为空,则一定是falseif (left == null || right == null){return false;}//如果上面都满足了,则说明该结点的左右结点均存在//但是需要注意,如果左右结点相等,还是无法肯定它们就是对称树,但如果左右节点不相等,则它们一定是非对称树if (left.val != right.val){return false;}//如果相等,则继续往下递归//这里递归也需要注意,即左边的左,对应右边的右;;;;;;左边的右,对应右边的左return CompareIsSymmetric(left.left,right.right) && CompareIsSymmetric(left.right,right.left);}
}

http://www.ppmy.cn/news/71933.html

相关文章

Navicat premium 15激活教程及安装教程+报错解决办法

Navicat premium 15激活教程及安装教程报错解决办法 1、安装包和注册工具下载2、安装Navicate Premium 15,直接下一步安装即可,安装位置可以按照到D盘3、激活Navicate Premium 15打开安装包里面的Navicat Keygen Patch v5.6.0 DFoX.exe工具当点击path选择…

ST平台用DMA传输ADC采集的数据

在 STM32F0 硬件平台上,使用 DMA(Direct Memory Access)传输 ADC(Analog-to-Digital Converter)采集的数据是一个高效的方法。下面是一些步骤和注意事项,帮助你实现这个功能: 配置 ADC&#xff…

这就是冒泡排序,像可乐中的气泡滋滋向上冒一样(44)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 什么是冒泡排序? 用Python写段代码,实现冒泡排序。 冒泡排序 冒泡排序(Bubble Sort)是一种…

数字化时代,如何做好用户体验与应用性能管理

引言 随着数字化时代的到来,各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务,这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责,且使用多种运维工具,因此,当…

详解MySQL的并发控制

目录 1.概述 2.事务 2.1.什么是事务 2.2.事务的隔离级别 2.2.1.三种数据一致性问题 2.2.2.四种隔离级别 2.3.如何设置隔离级别 3.锁 3.1.锁与事务的关系 3.2.分类 3.3.表锁 3.3.1.概述 3.3.2.读锁 3.3.3.写锁 3.3.4.保护机制 3.4.行锁 3.4.1.概述 3.4.2.什么…

探究C/C++编码世界:从字符编码到中文处理之艺

探究C-C编码世界:从字符编码到中文处理之艺 一、(1) C/C编码基础a. 计算机编码原理b. ASCII编码与扩展c. Unicode编码及其应用 二、(2) 字符编码与C/C操作a. 字符串处理函数b. 宽字符与多字节字符c. 字符编码转换方法 三、(3) 中文编码方式与实践a. GB2312、GBK与GB…

5.17黄金跌破2000还会涨吗?多单被套怎么办?

近期有哪些消息面影响黄金走势?今日黄金多空该如何研判? ​黄金消息面解析:周三(5月17日)亚市盘中现货黄金小幅反弹。目前交投于1990美元/盎司附近。昨日欧元区第一季度GDP年率修正值符合预期但欧元区5月ZEW经济景气指…

duplicate 复制过程(10g)

1.ASM 软件包的安装及配置(dup02) 1.1安装ASM软件包 注意选择的软件包要与操作系统平台、内核版本选择一致。ASM软件包可以到Oracle官网下载。 在节点上装asm软件包。(5U7 内核:2.6.18-274)上传: oracleasm-support-2.1.8-1.el…