算法的学习笔记—对称的二叉树(牛客JZ28)

news2024/9/21 16:27:17

img

😀前言
在算法的世界中,二叉树是一个极其重要的数据结构。它不仅广泛应用于各种算法的设计中,也是面试中常见的考察点之一。今天,我们将深入探讨一个经典的二叉树问题——对称的二叉树,并且会展示如何通过Java代码来解决这个问题。

🏠个人主页:尘觉主页

文章目录

  • 💞对称的二叉树
      • 🤔题目描述
      • 😊解题思路
      • 😃代码实现
      • 😀代码解析
    • 😄总结

💞对称的二叉树

NowCoder

🤔题目描述

我们需要判断一个二叉树是否是对称的。所谓对称的二叉树,简单来说就是一棵二叉树,它的左子树和右子树在结构上是镜像对称的。

举个简单的例子,下面这棵树是对称的:

0c12221f-729e-4c22-b0ba-0dfc909f8adf

😊解题思路

为了判断一棵二叉树是否对称,我们可以从以下几点来考虑:

  1. 如果二叉树为空,则它是对称的。
  2. 如果二叉树的左子树和右子树都为空,或者它们的结构及其对应节点的值都相等,那么这棵树是对称的。
  3. 递归地检查左子树的左节点与右子树的右节点,左子树的右节点与右子树的左节点,依次类推。如果所有节点都满足对称条件,则这棵树是对称的。

😃代码实现

在Java中,我们可以通过递归来实现这个判断。代码如下:

boolean isSymmetrical(TreeNode pRoot) {
    // 如果树为空,则认为它是对称的
    if (pRoot == null)
        return true;
    // 判断左子树和右子树是否对称
    return isSymmetrical(pRoot.left, pRoot.right);
}

boolean isSymmetrical(TreeNode t1, TreeNode t2) {
    // 如果两个子树都为空,则它们是对称的
    if (t1 == null && t2 == null)
        return true;
    // 如果其中一个为空,而另一个不为空,则它们不是对称的
    if (t1 == null || t2 == null)
        return false;
    // 如果两个节点的值不相等,则它们不是对称的
    if (t1.val != t2.val)
        return false;
    // 递归检查子树的结构和节点值是否对称
    return isSymmetrical(t1.left, t2.right) && isSymmetrical(t1.right, t2.left);
}

😀代码解析

  • isSymmetrical(TreeNode pRoot) 方法首先检查根节点是否为空,如果为空则认为树是对称的。如果不为空,则调用 isSymmetrical(TreeNode t1, TreeNode t2) 方法来检查树的左子树和右子树是否对称。
  • isSymmetrical(TreeNode t1, TreeNode t2) 方法中,我们首先处理两个终止条件:
    1. 如果 t1t2 都为 null,则返回 true,表示当前子树是对称的。
    2. 如果 t1t2 中只有一个为 null,则返回 false,表示当前子树不对称。
    3. 如果 t1t2 的值不相等,则返回 false
  • 最后,通过递归调用 isSymmetrical 方法检查 t1 的左子树和 t2 的右子树是否对称,同时检查 t1 的右子树和 t2 的左子树是否对称。如果两者都对称,则整个树是对称的。

😄总结

对称的二叉树问题通过递归的方法可以得到优雅的解决方案。这一问题不仅考察了我们对二叉树结构的理解,还测试了我们递归处理问题的能力。通过这种方式,我们能够快速有效地判断一棵树是否对称,进一步提升我们的算法设计和编码能力。希望这篇文章能够帮助大家更好地理解对称的二叉树问题及其解决方法。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2054692.html

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

相关文章

stripe Element 如何使用

这里要准备好几个东西: 一个支付成功过后的回调 还有一个下单的接口 一旦进入这个下单界面,就要去调下单的接口的,用 post, 这个 接口你自己写,可以写在后端中,也可以放到 nextjs 的 api 中。 首先说的是这个下单…

去中心化的新时代:Web3技术的全球影响

随着技术的不断演进,Web3正引领互联网的去中心化新时代。相较于传统的Web1和Web2,Web3通过去中心化、区块链和智能合约等技术,正在重塑网络的运作方式。这一变革不仅提升了网络的安全性和透明度,也对全球经济、社会和文化产生了深…

品牌出海新策略:携手TikTok达人,合作孵化IP实现双赢

在当今数字化时代,TikTok达人的IP孵化作为一种创新的合作模式,正逐渐成为品牌出海的新兴策略。通过与有潜力的TikTok达人合作,共同孵化新的IP,品牌不仅能够突破传统营销的局限,还能实现与达人共同成长的双赢局面。本文…

物流抓取机器人整体设计方案

一、功能简介 1、运行环境:巡线行驶(7路数字循迹,麦克纳姆轮车底盘) 2、目标识别:颜色识别(Maix-II Dock 视觉模块) 3、目标定位:视觉测距(Maix-II Dock 视觉模块&#x…

海外直播对网络的要求有哪些?

在全球化的大潮中,海外直播已成为越来越多企业、个人和机构展示自身、拓展市场、与全球用户互动的重要渠道。然而,在进行海外直播时,网络环境的搭建往往成为制约其成功与否的关键因素。那么,究竟什么样的网络环境才能满足海外直播…

Python使用Selenium进行Web自动化测试详解

目录 引言 一、Selenium简介 Selenium的核心组件 二、环境搭建 1. 安装Python 2. 安装Selenium库 3. 下载并配置浏览器驱动 三、基础用法 1. 启动浏览器 2. 定位页面元素 3. 元素操作 4. 等待元素加载 1. 测试目的 2. 测试步骤与代码实现 3. 注意事项 结论 引言…

学习方法[2]:如何有效地检索及选择学习资料?(致在自学之路仍在坚持的人)

有效地检索及选择学习资料 前言一、如何进行有效检索资料?(以bing为例)1.1 基础搜索1.2 高级搜索1.2.1 高级搜索关键字1.2.2 高级搜索选项 二、如何选择学习资料?(以编程为例)2.1 源代码2.2 官方文档2.3 英…

Quartz - 定时任务框架集成

参考了若依框架,将quartz定时任务框架集成到自己的项目当中。 目录 一、Quartz概述二、库表创建1.Quartz关键表(11张)表SQL 2.自定义业务表(2张)表SQL 三、代码示例1.依赖引入2.类文件1)定时任务配置类2&am…

优优嗨聚集团:餐饮合作新未来引领美食产业新风尚

在快速变化的21世纪,餐饮行业作为民生消费的重要组成部分,正经历着前所未有的变革与挑战。随着消费者需求的多元化、个性化以及科技的不断进步,餐饮合作的新模式正悄然兴起,为行业带来了前所未有的发展机遇与活力。本文将探讨餐饮…

如何复现Github上的项目以及conda的常用操作指令

在GitHub上关于深度学习的项目代码通常包含多种类型的文件,每种文件都有其特定的作用。以下是一些常见的文件及其作用的概述: 一个常用的项目结构如下: --project_name/ :项目名----data/:数据集--------__init__.py…

vue+elementui 主题配色修改-打造个性化配色系统

上一期中利用global.css来覆盖elementui原有的配色,修改了按钮和消息框。这一期继续尝试修改其他的控件。 1 修改info 类型按钮 上次修改了primary按钮,这次修改一下info按钮,在global.css中添加 .el-button--info {background-color: #d9d…

deepspeed的并行模式介绍笔记

1.整体框架 2.并行模式 1.数据并行DDP 数据切分以后,分开单张卡训练得到参数,然后综合在单卡计算。 要点:前向计算和反向计算两步骤走并汇总。 1.前向计算 需要留一块主卡一定空间用于综合。 2.反向传播 利用前向传播的汇总参数得到各个…

深度学习基础—超参数调试

1.超参数调试顺序 在训练深度网络最难的事情之一是超参数的选择,如何选择合适的超参数取值?下面我将谈谈,如下是我所理解的超参数调试顺序: 重要性排序 超参数 Top1梯队 学习率a Top2梯队 min-batch大小,隐层神经…

10 VS Code 调试技巧之逐断点、逐过程、单步调试与单步跳出

目录 1 断点调试 1.1 断点调试介绍 1.2 如何设置断点 1.3 如何开启调试 2 调试类型 2.1 逐断点调试 2.2 逐过程调试 2.3 单步调试 2.4 单步跳出 1 断点调试 遇到难以捉摸的软件错误时,老练的程序员会推荐断点调试。通过设置断点,逐步跟踪…

nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序

资源 Toolchain Information jetson-linux jetpack 文章目录 资源1 方案1 qemu-aarch64-static和docker 容器编译jetson2 方案2 模拟器交叉编译器2.1 应对库缺失的情况,进行环境准备2.1.1 模拟器(方案1)2.1.2 在jetson上面进行安装(方案2)2.…

如何有效清理宝塔控制面板中的垃圾文件与优化系统性能

宝塔控制面板(BT-Panel)作为一款流行的服务器管理软件,极大地简化了Linux服务器的管理任务,包括网站部署、数据库管理、文件操作等。然而,随着服务器运行时间的增长,系统中会积累各种临时文件、日志文件、缓…

STM32G474按钮输入和点灯

在获取到工程模板后,学习某个CPU的第一步通常都是IO口操作。因此按钮输入和点灯,就是本次学习的第一个程序。先从简单入手。 和GPIO操作有关的函数如下: __HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟 __HAL_RCC_GPIOB_CLK_ENABLE();//使能GPIOB时钟 _…

Redis7基础篇(四)

Redis管道 引入 set k1 v1.......需要往返三次 这是一个比较消耗性能的一件事情 怎么就可以一次性的将这些命令执行 就是使用mset这个方法 这个mset就相当于一个管道 把这些命令做成一个流水线的形式进行处理 解决思路 案例 两个set类型的三个哈希类型的一个list类型的 我们要…

知乎信息流广告效果如何?与其他信息流广告平台有何区别?

广告的有效触达与高效转化成为了品牌营销的核心挑战,知乎作为国内最大的知识分享平台,其信息流广告以其独特的优势脱颖而出,成为众多企业首选的营销工具,云衔科技助力企业实现高效知乎广告投放与代运营服务。 一、知乎信息流广告…

基于STM32+手机APP设计的智能停车场系统——程序源码原理图设计原理设计文档演示视频框图等(文末工程资料下载)

基于STM32手机APP设计的智能停车场系统 演示视频 基于STM32手机APP设计的智能停车场系统 元器件:DHT11、MQ2、STM32F103C8T6、SG90舵机、RC522频射模块、HC-SR04超声波模块、OLED、wifi模块、LED灯、蜂鸣器 功能简介 1、进出停车场时需要刷卡,进行一个…