【LeetCode经典题解】平衡二叉树高效判断:从O(n²)到O(n)优化

【LeetCode经典题解】平衡二叉树高效判断:从O(n²)到O(n)优化
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述


【前言】

在数据结构的知识体系里,平衡二叉树是确保二叉树各类操作高效执行的关键存在。力扣平台上“判断二叉树是否为平衡二叉树”这一经典问题,看似解法直观,实则能通过不同的解题思路,清晰展现出算法效率的天差地别,从最开始直观却低效的递归方式,到经过巧妙优化后的高效递归策略,背后蕴含着对平衡二叉树本质的深度剖析与精准把握。

这里写目录标题

一、平衡二叉树

平衡二叉树又称AVL树:当一棵空树或者它的左右两棵字数的高度差的绝对值不超过一,并且两棵子树都是平衡二叉树
【注意】

任意节点的左右子树高度差不超过一;所以子树都满足平衡条件;
在这里插入图片描述

二、思路分析

方法一:时间复杂度为O(n^2)

首先判断根节点是否为空,跟节点为空的话,是平衡二叉树;然后就是用getHigh()方法获取左右子树的高度;判断他们的高度差的绝对值小于等于1的话,还要递归左右子树,左右子树平衡就是平衡二叉树,;时间复杂度为O(n^2),因为计算高度时会重复遍历子树,每个节点都要求一次高度
在这里插入图片描述

方法二:时间复杂度为O(n)

先判断根节点是否为空,为空就是平衡二叉树;不为空调用getHigh()方法,通过判断getHigh()的返回值是否大于等于0来判断是否平衡;getHigh()方法计算二叉树高度的同时,判断树是否平衡,平衡返回树的高度,不平衡返回-1时间复杂度为O(n),n是二叉树节点,==每个节点只被访问一次,计算高度和判断平衡的操作都是O(1);

三、代码展示

publicbooleanisBalanced(TreeNode root){if(root ==null){returntrue;}int leftH =getHigh(root.left);int rightH =getHigh(root.right);returnMath.abs(leftH - rightH)<=1&&isBalanced(root.left)&&isBalanced(root.right);}publicintgetHigh(TreeNode root){if(root ==null){return0;}int leftH =getHigh(root.left);int rightH =getHigh(root.right);return leftH > rightH ? leftH+1: rightH+1;}
publicbooleanisBalanced(TreeNode root){if(root ==null){returntrue;}returngetHigh(root)>=0;}publicintgetHigh(TreeNode root){if(root ==null){return0;}int leftH =getHigh(root.left);if(leftH <0){return-1;}int rightH =getHigh(root.right);if(leftH >=0&& rightH >=0&&Math.abs(leftH - rightH)<=1){return leftH > rightH ? leftH+1: rightH+1;}else{return-1;}}

四、总结

“自顶向下”的递归方法虽然思路直观易懂,但由于在计算过程中会重复去计算子树的高度,导致时间复杂度达到了O(n^2),在处理大规模数据时显得力不从心;而“自底向上”的递归方法,借助后序遍历的顺序,在计算子树高度的同时就完成了平衡与否的判断,还利用提前终止递归的技巧避免了重复计算,成功将时间复杂度优化到O(n),这一过程很好地体现了在算法设计中,通过调整执行逻辑、复用中间计算结果,能够显著提升算法效率的核心思想。

Read more

AI绘画新姿势:Z-Image-Turbo_UI界面详细使用说明

AI绘画新姿势:Z-Image-Turbo_UI界面详细使用说明 Z-Image-Turbo 是当前生成质量与速度兼顾的轻量级文生图模型代表,8步即可输出1024×1024高清图像,细节丰富、风格稳定、响应迅速。而 Z-Image-Turbo_UI 界面正是为它量身打造的开箱即用型图形交互环境——无需写代码、不碰命令行、不配环境,打开浏览器就能开始创作。 本篇不是部署教程,也不是原理剖析,而是一份真正面向新手的 UI 操作说明书。从第一次点击到保存第一张作品,从调整参数到管理历史记录,所有操作都以“你正在用”为前提,一步一图、一图一解,确保你花15分钟就能上手,30分钟就能产出满意作品。 1. 启动服务:两行命令,模型就位 Z-Image-Turbo_UI 是一个基于 Gradio 构建的本地 Web 应用,运行后会在你的电脑上启动一个微型服务器,所有计算都在本地 GPU 完成,不上传数据、不依赖网络、不绑定账号。

By Ne0inhk

Discord中创建机器人的流程

主要步骤概览 1. 在 Discord Developer Portal 创建应用(Application) 2. 在应用中创建 Bot(Bot User) 3. 开启必要的权限与 Privileged Intents(特别是 Message Content Intent) 4. 生成邀请链接并把 Bot 邀请进你的服务器 5. 获取 Bot Token 并妥善保存(放到环境变量) 6. (可选)在服务器/频道设置权限,确认 Bot 可以读取消息历史与附件 7. 用 Python 运行最小测试脚本,确认能接收到消息并处理附件 详细步骤 1. 创建应用(Application) * 打开:https://discord.

By Ne0inhk
【国内电子数据取证厂商龙信科技】大疆无人机如何导出日志并解析

【国内电子数据取证厂商龙信科技】大疆无人机如何导出日志并解析

一、前言 我们在提取无人机数据的时候,可能会遇到由于无人机自身没有存储介质从而导致无法对无人机进行镜像解析数据的情况,今天给大家讲解下如何通过无人机自带的功能界面导出日志并解析。 二、对于没有存储介质的无人机设备如何导出日志 2.1安装软件 一般来说,无人机官方都有配套的查看工具。我们以大疆无人机为例,首先我们需要在计算机上安装大疆厂商官方发布的软件DJl Assistant2 For Mavic工具。 2.2连接设备 将无人机设备用usb线连接至电脑 打开DJl Assistant2 For Mavic工具 2.3导出日志 设备连接上后可以看见日志导出模块,可以将日志全选或者根据需要的时间段进行选择,勾选上点击下载到本地即可。 导出之后,即是dat文件 将dat日志导入到龙信物联网取证系统 LX-A501-V1进行解析。 打开龙信物联网取证系统 LX-A501-V1软件——新建案件 选择正确的设备类型、品牌 提取方式选择文件——添加文件选择我们导出的日志 开始取证——等待解析完成即可 解析完成后即可查看数据,包含设备基本

By Ne0inhk
OpenClaw(Clawdbot)插件更新,新增支持在面板一键QQ和飞书机器人

OpenClaw(Clawdbot)插件更新,新增支持在面板一键QQ和飞书机器人

这次,OpenClaw 插件迎来了一次重要更新。 现在,你可以直接在插件中配置 飞书机器人或 QQ 机器人,让 OpenClaw 真正走出 Web 界面,进入你日常使用的消息工具中。 无需额外部署服务,配置完成后即可开始对话。 重要提示:由于官方更改包名,不支持直接升级,如需更新请卸载旧版插件,安装新版OpenClaw插件,已有数据会丢失,请您评估是否需要更新,新安装不受影响。 配置QQ机器人1. 打开QQ开放平台,注册账号,如已注册可直接登陆 点击编辑 IP 白名单,填写服务器 IP 并保存 点击开发管理,获取APPID、AppSecret 创建完成后点击刚刚创建的机器人 填写机器人基础信息 登录后点击机器人,创建机器人 按提示完成登录 8.将获取到的信息填写到插件,并保存启用 添加后即可在群聊中进行对话 在此处添加完成后回到QQ-群管理-添加机器人,在其他页面找到机器人 选择需要使用的群聊 回到QQ机器人平台,

By Ne0inhk