LeetCode 解题思路 20(Hot 100)

news2025/3/19 21:12:19

在这里插入图片描述

解题思路:

  1. 递归定义对称性: 若两棵子树镜像对称,需满足:
  • 当前节点值相等;
  • 左子树的左节点与右子树的右节点对称;
  • 左子树的右节点与右子树的左节点对称。
  1. 终止条件:
  • 两个节点均为空 → 对称;
  • 一个节点为空,另一个非空 → 不对称;
  • 节点值不等 → 不对称。

Java代码:

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root.left, root.right);
    }

    private boolean check(TreeNode left, TreeNode right) {
        if (left == null && right == null) return true;
        if (left == null || right == null) return false;
        if (left.val != right.val) return false; 
        return check(left.left, right.right) && check(left.right, right.left);
    }
}

复杂度分析:

  • 时间复杂度: O(n),每个节点最多被访问一次。
  • 空间复杂度: O(h),h为树的高度。最坏情况(链表状树):O(n),最优情况(平衡树):O(log n)。
    在这里插入图片描述

解题思路:

  1. 递归计算子树高度: 对于每个节点,递归计算其左子树和右子树的高度。
  2. 更新最长路径: 在计算当前节点的子树高度时,利用左子树和右子树的高度之和(left + right + 1)来更新全局变量 res。此值表示以当前节点为中间节点的最长路径的节点数。
  3. 返回子树高度: 当前节点的子树高度为左、右子树高度的较大值加1,用于上层节点的路径计算。
  4. 结果转换: 由于树的直径是边的数量,而 res 记录的是节点数,最终结果需返回 res - 1。

Java代码:

class Solution {
    int res = 1;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return res - 1;
    }
    private int dfs(TreeNode node) {
        if (node == null) {
            return 0;
        }
        int left = dfs(node.left);
        int right = dfs(node.right);
        res = Math.max(res, left + right + 1);
        return Math.max(left, right) + 1;
    }
}

复杂度分析:

  • 时间复杂度: O(n)。每个节点仅被访问一次,递归调用的总次数为 n(n 为节点数)。
  • 空间复杂度: O(h)。h 为树的高度,由递归调用栈的深度决定。最坏情况下(树退化为链表),空间复杂度为 O(n);平均情况下为 O(log n)。

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

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

相关文章

挖矿------获取以太坊测试币

文章目录 挖矿------获取以太坊测试币通过水龙头获取以太坊测试币了解Sepolia是什么?水龙头(Faucet)是什么?Gitcoin Passport是什么? 操作1.MetaMask钱包2.将MetaMask切换到Sepolia测试网络3.用MetaMask连接Gitcoin Pa…

每天五分钟深度学习框架pytorch:基于pytorch搭建循环神经网络RNN

本文重点 我们前面介绍了循环神经网络RNN,主要分析了它的维度信息,其实它的维度信息是最重要的,一旦我们把维度弄清楚了,一起就很简单了,本文我们正式的来学习一下,如何使用pytorch搭建循环神经网络RNN。 RNN的搭建 在pytorch中我们使用nn.RNN()就可以创建出RNN神经网络…

XEasyWork:面向AI应用的可视化工作流开发平台

文章目录 前言 一、平台核心价值 1.1产品定位 1.2 技术优势 二、技术架构解析 2.1战略级整合 自主开发模块 2.2集成开源项目 三、体验地址 三、未来规划 总结 前言 在人工智能技术快速落地的今天,开发者在构建AI应用时仍面临两大挑战:技术栈复杂带来的高…

C#进阶(多线程相关)

1。进程? 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,【是系统进行资源分配的基本单位】,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体&#xf…

【C++】:C++11详解 —— 右值引用

目录 左值和右值 左值的概念 右值的概念 左值 vs 右值 左值引用 和 右值引用 左值引用 右值引用 左值引用 vs 右值引用 使用场景 左值引用的使用场景 左值引用的短板 右值引用的使用场景 1. 实现移动语义(资源高效转移) 2. 优化容器操作&a…

【css酷炫效果】纯CSS实现虫洞穿越效果

【css酷炫效果】纯CSS实现穿越效果 缘创作背景html结构css样式完整代码基础版进阶版(虫洞穿越) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90491973 缘 创作随缘,不定时…

Linux IP 配置

Linux IP 配置 1 环境介绍2 网卡信息配置3 使用nmtui工具配置4 更多Linux命令学习使用列表 1 环境介绍 虚拟机,服务器安装系统完成后,先要配置ip 地址,这样可以方便远程若是物理服务器一般会有4个网卡信息麒麟v10,CentOS7&#x…

基于 SSE 和 WebSocket 的在线文本实时传输工具

简介 在线文本实时传输工具支持 SSE(Server-Sent Events) 和 WebSocket,可在不同设备间快速共享和同步文本,适用于跨设备协作、远程办公和即时通讯。 核心功能 实时同步:文本输入后,另一端用户可立即看到…

数图亮相第三届全国生鲜创新峰会,赋能生鲜零售数字化转型

2025年3月15-18日,第三届全国生鲜创新峰会在湖北宜昌召开,主题为“生鲜破局,重塑价值”。峰会汇聚行业专家、企业领袖及精英,探讨生鲜零售新机遇与挑战。作为领先的“智慧零售”服务商,数图信息科技受邀出席&#xff0…

go 安装swagger

1、依赖安装: # 安装 swag 命令行工具 go install github.com/swaggo/swag/cmd/swaglatest# 安装 gin-swagger 和 swagger 文件的依赖 go get -u github.com/swaggo/gin-swagger go get -u github.com/swaggo/files 2、测试 cmd中输入: swag -v 3、…

CH347使用笔记:CH347结合STM32CubeIDE实现单片机下载与调试

目录 基于 STM32CubeIDE的 CH347 JTAG/SWD调试器使用说明1. CH347驱动安装与配置2. STM32CubeIDE调试器配置2.1 打开相关工程后,进行以下操作2.2 openocd.exe替换2.3 脚本添加2.4 更改调试器选择 3. 下载程序4. 使用过程中可能遇到的问题4.1 CH347未插入4.2 Openocd…

从C语言开始的C++编程生活(1)

前言 本系列文章承接C语言的学习,需要有C语言的基础才能学会哦。 第1篇主要讲的是有关于C的命名空间、输入和输出。 C才起步,都很简单呢! 目录 前言 命名空间namespace 基本语法 作用 使用命名空间 域作用限定符 :: 基本语法 using n…

Python F-String 深度解析:原理、用法与最佳实践

# Python F-String 深度解析:原理、用法与最佳实践 ## 一、引言 Python 的 F-String(格式化字符串字面值)自 3.6 版本引入以来,凭借其简洁性和高效性,迅速成为字符串格式化的首选方案。本文将从原理、核心用法和编码规…

20. Excel 自动化:Excel 对象模型

一 Excel 对象模型是什么 Excel对象模型是Excel图形用户界面的层次结构表示,它允许开发者通过编程来操作Excel的各种组件,如工作簿、工作表、单元格等。 xlwings 是一个Python库,它允许Python脚本与Excel进行交互。与一些其他Python库&#x…

解决uni-app授权弹框华为审核拒绝

背景: 在使用定位、相机、文件、电话,需要用户同意授权时,华为和vivo需要告知用户使用权限目的。 方案: 在uni授权时,弹框告诉授权目的,效果如下: 代码: const perListener {//…

施耐德PLC仿真软件Modbus tcp通讯测试

安装仿真软件:EcoStruxure™ Control Expert - PLC 仿真器 下载地址:https://www.schneider-electric.cn/zh/download/document/EIO0000001719/ 配置CPU: 切换至仿真模式,系统托盘中出现仿真器图标 新建变量test,地址…

1.排序算法(学习自用)

1.冒泡排序 算法步骤 相邻的元素之间对比,每次早出最大值或最小值放到最后或前面,所以形象的称为冒泡。 特点 n个数排序则进行n轮,每轮比较n-i次。所以时间复杂度为O(n^2),空间复杂度为O(1),该排序算法稳定。 代码…

vs2017版本与arcgis10.1的ArcObject SDK for .NET兼容配置终结解决方案

因电脑用的arcgis10.1,之前安装的vs2010正常能使用AO和AE,安装vs2017后无法使用了,在重新按照新版本arcgis engine或者arcObject费时费力,还需要重新查找资源。 用vs2017与arc10.1的集成主要两个问题,1:安装后vs中没有…

基于yolo11+flask打造一个精美登录界面和检测系统

这个是使用flask实现好看登录界面和友好的检测界面实现yolov11推理和展示,代码仅仅有2个html文件和一个python文件,真正做到了用最简洁的代码实现复杂功能。 测试通过环境: windows x64 anaconda3python3.8 ultralytics8.3.81 flask1.1.…

用 Vue 3.5 TypeScript 重新开发3年前甘特图的核心组件

回顾 3年前曾经用 Vue 2.0 开发了一个甘特图组件,如今3年过去了,计划使用Vue 3.5 TypeScript 把组件重新开发,有机会的话再开发一个React版本。 关于之前的组件以前文章 Vue 2.0 甘特图组件 下面录屏是是 用 Vue 3.5 TypeScript 开发的目前…