LC 110.平衡二叉树

110. 平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例 1:

输入: root = [3,9,20,null,null,15,7]
输出: true

示例 2:

输入: root = [1,2,2,3,3,null,null,4,4]
输出: false

示例 3:

输入: root = []
输出: true

提示:

  • 树中的节点数在范围 [0, 5000]
  • − 1 0 4 ≤ N o d e . v a l ≤ 1 0 4 -10^4 \leq Node.val \leq 10^4 104Node.val104

解法一(后序遍历+递归)

思路分析:

  1. 使用后序遍历,先遍历左右节点获取高度进行判断;

  2. 若左右子树高度差值不超过1,则符合条件;

  3. 如超过1,则不符合条件,返回false;

  4. 通过递归的方式求取左右子树的深度

实现代码如下:

class Solution {public boolean isBalanced(TreeNode root) {if (root == null) return true;// 后序遍历 先遍历获取左右子树高度int leftHeight = getHeight(root.left);int rightHeight = getHeight(root.right);return Math.abs(leftHeight - rightHeight) <= 1&& isBalanced(root.left) && isBalanced(root.right);}// 后序遍历获取 二叉树高度private int getHeight(TreeNode node) {if (node == null)return 0;return Math.max(getHeight(node.left), getHeight(node.right)) + 1;}
}

提交结果如下:

解答成功:
执行耗时:1 ms,击败了43.88% 的Java用户
内存消耗:43.2 MB,击败了10.39% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2),遍历二叉树结点时,需要遍历求取二叉树结点的高度

  • 空间复杂度:不考虑递归消耗, O ( 1 ) O(1) O(1)

解法二(优化解法一)

思路分析:

  1. 首先对于解法一进行思考,每次判断一个结点的左右子节点是否符合要求时,需要再去求左右结点的高度,这种判断是从上向下的,对于下面的一些结点会重复访问多次,时间复杂度过高。

  2. 因此可以考虑使用自下向上的判断二叉树是否为高度平衡二叉树,即获取子树高度并判断,然后向上接着判断

  3. 若判断子树为平衡,则返回该子树高度,若不平衡则返回-1

实现代码如下:

class Solution {public boolean isBalanced(TreeNode root) {if (root == null) return true;return getHeight(root) >= 0;}// 后序遍历获取 二叉树高度private int getHeight(TreeNode node) {if (node == null)return 0;// 左int leftHeight = getHeight(node.left);// 右int rightHeight = getHeight(node.right);if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight-rightHeight) > 1)return -1;	// 若左子树或右子树或当前子树不平衡 则返回-1// 若当前子树平衡 则返回其高度return Math.max(leftHeight, rightHeight) + 1;}
}

提交结果如下:

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:43.2 MB,击败了10.39% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n),自下向上只需遍历一遍二叉树

  • 空间复杂度: O ( n ) O(n) O(n),考虑递归二叉树的层数,对空间的消耗

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xilinx fpga程序固化

一、前言 xilinx 旗下的产品主要有包含有处理器的SOC系列&#xff0c;也有只有纯逻辑的fpga&#xff0c;两者的程序固化的方法并不相同&#xff0c;本文介绍只包含纯逻辑而不涉及处理器的fpga的代码固化。 二、固化流程 将工程综合&#xff0c;实现&#xff0c;并得到比特流…

免疫优化算法

有点东西&#xff0c;遗传进化机制好像更完善了。 与遗传算法大体框架类似&#xff0c;遗传变异等细节上有差别

前后端开发之——文章分类管理

原文地址&#xff1a;前后端开发之——文章分类管理 - Pleasure的博客 下面是正文内容&#xff1a; 前言 上回书说到 文章管理系统之添加文章分类。就是通过点击“新建文章分类”按钮从而在服务端数据库中增加一个文章分类。 对于文章分类这个对象&#xff0c;增删改查属于配…

Python | Leetcode Python题解之第5题最长回文子串

题目&#xff1a; 题解&#xff1a; class Solution:def expand(self, s, left, right):while left > 0 and right < len(s) and s[left] s[right]:left - 1right 1return (right - left - 2) // 2def longestPalindrome(self, s: str) -> str:end, start -1, 0s …

探索牙科业务架构的优化与整合解决方案

在现代医疗领域中&#xff0c;牙科作为一个重要的分支&#xff0c;其业务架构和整体解决方案的优化与整合&#xff0c;对于提高诊疗效率、提升患者体验以及促进口腔健康水平具有重要意义。本文将深入探讨牙科业务架构的优化方向和整体解决方案&#xff0c;为牙科行业的发展提供…

2024年腾讯云最新优惠活动整理汇总

随着云计算技术的不断发展&#xff0c;越来越多的企业和个人开始选择将业务迁移到云端。腾讯云作为国内领先的云计算服务提供商&#xff0c;不仅提供了稳定、安全的云服务&#xff0c;还通过一系列的优惠活动&#xff0c;为用户带来了实实在在的福利。2024年&#xff0c;腾讯云…

【嵌入式智能产品开发实战】(十五)—— 政安晨:通过ARM-Linux掌握基本技能【GNU C标准与编译器】

目录 GNU C 什么是C语言标准 C语言标准的内容 C语言标准的发展过程 1.K&R C 2.ANSI C 3.C99标准 4.C11标准 编译器对C语言标准的支持 编译器对C语言标准的扩展 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品…

NMS 系列:soft,softer,weighted,iou-guided, Diou, Adaptive

系列文章目录 IOU 系列&#xff1a;IOU,GIOU,DIOU,CIOU 文章目录 系列文章目录一、NMS简介&#xff08;一&#xff09;为什么要使用NMS&#xff08;二&#xff09;NMS的算法流程&#xff08;三&#xff09;NMS的置信度重置函数&#xff08;四&#xff09;NMS的局限性&#xff…

智能试卷分析、智能组卷系统

本课题开发一个新型智能试卷分析评价系统&#xff0c;该系统实现了学生试卷的生成与评估以及对各种评估信息的管理和维护。该系统使用SpringBoot MysqlVue搭建的框架为设计平台&#xff0c;以B/S模式开发与设计题库及试卷管理模块。 学生功能&#xff1a;登录&#xff0c;答题考…

SpringData ElasticSearch - 简化开发,完美适配 Spring 生态

目录 一、SpringData ElasticSearch 1.1、环境配置 1.2、创建实体类 1.3、ElasticsearchRestTemplate 的使用 1.3.1、创建索引 设置映射 1.3.2、简单的增删改查 1.3.3、搜索 1.4、ElasticsearchRepository 1.4.1、使用方式 1.4.2、简单的增删改查 1.4.3、分页排序查…

软考高级架构师:系统性能设计-阿姆达尔定律概念和例题

一、AI 讲解 系统性能设计中的一个重要概念是阿姆达尔定律&#xff08;Amdahl’s Law&#xff09;。阿姆达尔定律是由吉恩阿姆达尔&#xff08;Gene Amdahl&#xff09;在1967年提出的&#xff0c;用于评估系统性能提升的理论上限&#xff0c;特别是在考虑并行计算时。该定律表…

Java获取IP地址以及MAC地址(附Demo)

目录 前言1. IP及MAC2. 特定适配器 前言 需要获取客户端的IP地址以及MAC地址 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class test {public static void main(String[] args) {try {// 执行命令Process process…