当前位置: 首页 > news >正文

leetCode——二叉树刷题——平衡二叉树

平衡二叉树

在这里插入图片描述

地址:https://leetcode.cn/problems/balanced-binary-tree/description/

/*** Definition for a binary tree node.* 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;*     }* }*/
class Solution {public boolean isBalanced(TreeNode root) {//首先判断的就是根节点if(root == null) {return true;}//然后判断的是左节点return isHeight(root) >= 0;}public int isHeight(TreeNode root){if(root == null) {return 0;}int lf = isHeight(root.left);//如果说你这个中间已经不是平衡二叉树了就可以直接返回-1,进行判断了if(lf < 0) {return -1;}
int rf = isHeight(root.right);if(rf >= 0 && lf >= 0 && Math.abs(lf-rf) <= 1){return Math.max(lf,rf) + 1;}else {return -1;}}}

明确高度定义

二叉树的 “高度” 指从当前节点到其最远叶子节点的路径上的节点数量。例如:

  • 空树的高度为 0;
  • 只有一个根节点的树,高度为 1;
  • 若根节点有左子树(高度 2)和右子树(高度 1),则根节点的高度为 1 + max(2, 1) = 3。
    核心判断逻辑(递归实现)
    通过一个辅助方法同时完成两件事:
  • 计算当前节点的高度;
  • 在计算高度的过程中,判断当前节点的左右子树是否平衡。

具体步骤如下:
步骤 1:处理空树

  • 如果当前节点为 null(空树),则它的高度为 0,且必然是平衡的,直接返回 0。

步骤 2:递归计算左子树高度

  • 调用辅助方法计算左子树的高度。如果左子树返回 -1(标记为不平衡),说明左子树已经不符合平衡条件,当前树也必然不平衡,直接返回
    -1(提前终止递归)。
    步骤 3:递归计算右子树高度

  • 同理,调用辅助方法计算右子树的高度。如果右子树返回 -1,直接返回 -1。

步骤 4:判断当前节点是否平衡
比较左、右子树的高度差:

  • 若高度差的绝对值 > 1:当前节点的左右子树不平衡,返回 -1;

  • 若高度差的绝对值 ≤ 1:当前节点平衡,返回当前节点的高度(1 + max(左子树高度, 右子树高度))。

步骤 5:最终判断整棵树是否平衡

  • 主方法(isBalanced)调用辅助方法后,若返回值 ≠ -1,说明整棵树的所有节点都满足平衡条件,返回 true;否则返回 false。

这个题 很简单就是说白了,依旧是用递归然后,判断他的高度,然后返回高度值是多少,然后判断高度差的绝对值是不是1 ,这里加了一个就很好的点是什么,一开始是没有在下面这个,按这个的时间复杂度是O(n*n),因为有重复的计算,但是加了一个这个再每一次递归的走到这里的时候就可以重新判断高度差是不是好是1,如果不是直接结束了

//的核心作用是提前终止无效递归,避免重复计算,从而将时间复杂度从 O (n²) 优化到 O (n)。if(lf < 0) {return -1;}
http://www.dtcms.com/a/465606.html

相关文章:

  • 资讯网站 整体ui自己在线制作logo免费图片
  • 网站源码下载免费一 网站建设管理基本情况
  • Linux内核架构浅谈8-Linux内核与UNIX的传承:设计思想与特性差异
  • C# 写入CSV文件和导出CSV文件总结
  • 基于NVIDIA ORIN+FPGA+AI自动驾驶硬件在环注入测试
  • 怎么帮网站做支付接口王妃说此生不复相见
  • 虚幻基础:NPC制作
  • 智能眼镜行业腾飞在即,苹果/微美全息锚定“AR+AI眼镜融合”之路抢滩市场!
  • vue中慎用v-if和v-show导致不好排查无预期的错误和异常
  • Rokid JSAR 技术开发全指南:基于 Web 技术栈的 AR 开发实战
  • 顶尖高校读研经验-读研生活篇
  • 例点估算网站开发项目工作量推荐做任务网站
  • 【RH850F1KMS1】一文了解瑞萨MCU的芯片引脚标识名称
  • MPLS技术详解1:原理、架构与转发机制详析
  • WPF自定义控件之环形进度条
  • 深度学习入门(一)——从神经元到损失函数,一步步理解前向传播(下)
  • php网站怎么做伪静态织梦模板网站好吗
  • 电脑所有可用的网络接口
  • 宁波网站设计推广培训班呼和浩特做网站的
  • TensorFlow深度学习实战(40)——图神经网络(GNN)
  • 水库安全保障:单北斗GNSS变形监测系统的应用与维护探讨
  • Spring中Bean 的生命周期
  • 【C++】智能指针介绍
  • 利用腾讯混元大模型搭建Cherry Studio自有知识库,打造“智能第二大脑”
  • 咸阳做网站的公司有哪些电商卖货平台有哪些
  • 浏阳网站建设卷云网络做网页的it网站
  • 广东省省考备考(第一百二十天10.10)——资料分析、判断推理(强化训练)
  • 常用的C++压测框架
  • 强化学习之父 Richard Sutton :大模型是死路一条
  • 【YOLO 模型入门】(1)一文读懂 YOLO:从核心概念到检测原理