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

news2024/11/22 11:39:03

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 TreeNode


	public boolean isSymmetric(TreeNode root) {
		//1.递归判断
		if (root==null){
			return true;
		}

		return CompareIsSymmetric(root.left,root.right);

	}

	private boolean CompareIsSymmetric(TreeNode left, TreeNode right) {
		//全空则为true
		if (left==null && right==null){
			return true;
		}
		//一个为空,另一个不为空,则一定是false
		if (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.coloradmin.cn/o/535703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谈谈包装类与泛型

目录 包装类 基本数据类型与对应的包装类 装箱和拆箱 装箱 拆箱 泛型 什么是泛型 泛型的语法与使用 泛型的编译 擦除机制 泛型的上界 泛型方法 提到泛型的话,我们就先提一下包装类吧! 包装类 在Java中,由于基本类型不是继承自Ob…

STC8单片机+基于DMP库解析MPU6050数据+匿名上位机图形化显示

STC8单片机+基于DMP库解析MPU6050数据+匿名上位机图形化显示 📌相关篇《STC8单片机+基于DMP库解析MPU6050数据+vofa+图形化显示》✨该工程代码匹配的是匿名四轴上位机软件的2.6版本通讯协议,所以支持使用2.6版本的,最新的版本不支持。🌿验证对象:STC8H8K64U🌿时钟频率…

产品需求文档|协调、协作和沟通新产品开发的专业指南

「产品需求文档」是一个强大的产品管理工具,被众多敏捷团队推荐,并被一些行业中的大公司使用。 它有助于使团队保持一致,促进长期合作,并向团队成员传达优先必做事项,以完成工作。 如果你还没有开始制作,…

一个有趣的vc1编码器

这里分享一个vc1编码器,下载地址: https://download.csdn.net/download/weixin_43360707/87791898 文件包在附件,打开文件夹,可以看到下面三个文件夹: 因为我们的系统试Linux,所以我们选择Linux(x64). 继…

kubeadm方式搭建的k8s集群升级——2023.05

文章目录 一、概述二、集群概况三、升级集群2.1 确定升级版本2.2 升级Master2.3 升级 Worker 四、验证集群 一、概述 搭建k8s集群的方式有很多种,比如二进制,kubeadm,RKE(Rancher)等,k8s集群升级方式也各有…

利用android studio 生成 JNI需要的动态库so文件 图文详解

一、环境搭建 1.1 Android studio2021.2.1安装 到官网下载,此处不再陈述 1.2 JNI安装 JNI 是JDK里的内容,电脑上正确安装并配置JDK即可。 1.3 NDK安装 直接在Android studio下载(File---->Settings) 1.4 编译工具 工具一…

72.建立一个表格组件

本节课我们将实现如下的表格&#xff1a; ● 首先&#xff0c;我们直接用表格元素将这些数据展现出来 <table><tr><td>Chair</td><td>The Laid Back</td><td>The Worker Bee</td><td>The Chair 4/2</td></tr…

数据结构与算法——算法与算法分析

算法与算法分析 初识算法算法的定义算法的描述算法与程序算法的特性算法设计的要求 算法时间效率的度量事前估计法算法时间复杂度的渐进表示法算法时间复杂度案例分析最好、最坏和平均时间复杂度算法的空间复杂度 初识算法 算法的定义 算法&#xff0c;即是对特定问题求解方法…

Winform实现以管理员模式启动并实现修改系统时间

场景 SpringBoot/Java中定时请求并根据服务端响应头的date实现本地Windows修改时间/时间同步(管理员权限问题-bat管理员启动cmd并运行jar)&#xff1a; SpringBoot/Java中定时请求并根据服务端响应头的date实现本地Windows修改时间/时间同步(管理员权限问题-bat管理员启动cmd…

在家吃灰老主机怎么自建黑群晖NAS当影音服务器

准备:u盘一个,老主机一个,要显示器键盘,烧u盘软件win32-disk(网上找)、balena(balenaEtcher - Flash OS images to SD cards & USB drives)的 1,巴西大佬的引导文件 进来这里 GitHub - fbelavenuto/arpl: Automated Redpill Loader 点右边的release文件下载 下载…

golang 函数调用栈笔记

一个被函数在栈上的情况&#xff1a;&#xff08;栈从高地址向低地址延伸&#xff09; 返回地址&#xff08;函数执行结束后&#xff0c;会跳转到这个地址执行&#xff09; BP&#xff08;函数的栈基&#xff09;局部变量返回值&#xff08;指的是函数返回值&#xff0c;eg&am…

Facebook广告投放过程中,如何提高有效曝光?

在数字营销中&#xff0c;广告曝光是至关重要的一环&#xff0c;Facebook广告投放也不例外。 有效曝光能够提高广告的点击率和转化率&#xff0c;从而帮助企业实现更好的广告效果。那么在Facebook广告投放过程中&#xff0c;如何提高有效曝光呢&#xff1f;下面将为大家分享几…

【Mybatis】SpringBoot整合Mybatis

唠嗑部分 之前我们说了Mybatis的一些文章&#xff0c;相关文章&#xff1a; 【Mybatis】简单入门及工具类封装-一 【Mybatis】如何实现ORM映射-二 【Mybatis】Mybatis的动态SQL、缓存机制-三 【Mybatis】Mybatis处理一对多、多对多关系映射-四 这篇文章我们来说说SpringBoot如…

前端面试高频题精讲(一)

HTML篇 什么是语义化 用正确的标签做正确的事情。例如&#xff1a;段落用 p 标签&#xff0c;标题用 h 系列标签。 便于团队的开发和维护&#xff0c;我见过用div走天下的&#xff0c;但不利于看清页面结构。在没有加载 CSS 的情况下也能呈现较好的内容结构与代码结构&#xf…

Ubuntu18.04/20.04/22.04的Apollo8.0软件包安装(免编译)

本文主要介绍在如何使用软件包&#xff08;即 deb 包&#xff09;的方式来安装 Apollo&#xff0c;相对于源码方式安装&#xff0c;软件包安装方式不需要编译&#xff0c;更加快捷。但是对环境的支持比较单一&#xff0c;如果在自定义环境内安装&#xff0c;请移步源码安装方式…

camunda流程引擎connector如何使用

在 Camunda 中&#xff0c;Connector 是一种用于与外部系统或服务交互的机制。它允许 BPMN 模型中的 Service Task 节点与外部系统或服务进行通信&#xff0c;从而使流程更加灵活和可扩展。使用 Connector&#xff0c;可以将业务流程与外部系统集成在一起&#xff0c;而无需编写…

java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家…

Python学习27:存款买房(A)

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 你刚刚大学毕业&#xff0c;…

亚马逊如何提高商品listing转化率?测评自养号优势和技巧有哪些?

之前有讲过&#xff0c;亚马逊店铺流量的几大入口&#xff0c;如何获取流量。那么获取了流量之后&#xff0c;亚马逊卖家就需要考虑到转化率的问题&#xff0c;如果流量来没有转化率&#xff0c;一样不会产生订单。如果转化率太低还会影响到商品的表现&#xff0c;比如排名会下…

亚马逊云科技基础设施为大型模型推理提供技术保障

在2019年的亚马逊云科技re:Invent上&#xff0c;亚马逊云科技发布了新的基础设施Inferentia芯片和Inf1实例。Inferentia是一种高性能机器学习推理芯片&#xff0c;由亚马逊云科技定制设计&#xff0c;其目的是提供具有成本效益的大规模低延迟预测。时隔四年&#xff0c;2023年4…