二叉树——110. 平衡二叉树

简介: 本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助

1 题目描述

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

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

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

2 题目示例

image.png

image.png

示例 3:

输入:root = []
输出:true

3 题目提示

树中的节点数在范围 [0, 5000] 内
-104 <= Node.val <= 104

4 思路

这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 11,则二叉树是平衡二叉树。根据定义,一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树,因此可以使用递归的方式判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下或者自底向上。

image.png

有了计算节点高度的函数,即可判断二叉树是否平衡。具体做法类似于二叉树的前序遍历,即对于当前遍历到的节点,首先计算左右子树的高度,如果左右子树的高度差是否不超过 11,再分别递归地遍历左右子节点,并判断左子树和右子树是否平衡。这是一个自顶向下的递归的过程。

复杂度分析
时间复杂度:o(n²),其中n是二叉树中的节点个数。最坏情况下,二叉树是满二叉树,需要遍历二叉树中的所有节点,时间复杂度是O(n)。
对于节点p,如果它的高度是d,则 height(p)最多会被调用d次(即遍历到它的每一个祖先节点时)。对于平均的情况,一棵树的高度h满足O(h)= O(logn),因为d<h,所以总时间复杂度为O(n logn)。对于最坏的情况,二叉树形成链式结构,高度为O(n),此时总时间复杂度为o(n²)。
空间复杂度:O(n),其中n是二叉树中的节点个数。空间复杂度主要取决于递归调用的层数,递归调用的层数不会超过n。

5 我的答案

class Solution {
    public boolean isBalanced(TreeNode root) {
        if (root == null) {
            return true;
        } else {
            return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
        }
    }

    public int height(TreeNode root) {
        if (root == null) {
            return 0;
        } else {
            return Math.max(height(root.left), height(root.right)) + 1;
        }
    }
}
相关文章
|
NoSQL 程序员 Linux
轻踩一下就崩溃吗——踩内存案例分析
踩内存问题分析成本较高,尤其是低概率问题困难更大。本文详细分析并还原了两个由于动态库全局符号介入机制(it's a feature, not a bug)触发的踩内存案例。
|
JavaScript 前端开发
[Vue warn]: Error in v-on handler (Promise/async): “NavigationDuplicated: Navigating to current loca
[Vue warn]: Error in v-on handler (Promise/async): “NavigationDuplicated: Navigating to current loca
488 0
|
开发工具 git
git clone避坑的万能步骤
git clone避坑的万能步骤
2798 1
|
机器学习/深度学习 分布式计算 DataWorks
阿里云大数据ACA及ACP复习题(231~240)
本人备考阿里云大数据考试时自行收集准备的题库,纯手工整理的,能够覆盖到今年7月份,应该是目前最新的,发成文章希望大家能一起学习,不要花冤枉钱去买题库背了,也希望大家能够顺利通关ACA和ACP考试。
|
定位技术
GIS空间分析 地统计分析4 指示克里格内插
地统计分析之指示克里格内插 掌握构建某一指标超出临界值的概率图的方法
184 0
|
前端开发 算法 搜索推荐
【面试题】20个常见的前端算法题,你全都会吗?
【面试题】20个常见的前端算法题,你全都会吗?
790 0
【MATLAB第26期】区间预测 | 基于MATLAB的LASSO分位数回归预测模型 负荷预测数据
【MATLAB第26期】区间预测 | 基于MATLAB的LASSO分位数回归预测模型 负荷预测数据
|
关系型数据库 MySQL 数据库
请解释MySQL中的锁机制,包括共享锁和排他锁的概念和区别。
MySQL中的锁机制是用于管理并发访问数据库的一种技术。通过使用锁,可以确保在同一时间只有一个用户或进程能够对数据进行读取或修改,以避免数据冲突和不一致性。
|
移动开发 小程序 前端开发
Java互联网+医院智能导诊系统源码 自动兼容H5小程序、Uniapp
前端用的uniapp,自动兼容小程序与H5的版本
173 0
|
项目管理
工程设备在线监测管理系统WMWS自动预警功能介绍
WMWS(Wincom Monitoring Web System)是稳控科技专门为终端客户开发的在线监测管理系统,基于BS 架构。可在浏览端实现项目管理、数据查看与下载、曲线查看等操作。系统界面风格简约、布局统一、逻辑清晰,具有极佳的操控体验。三层监测要素架构,实现了多项目、多设备、多测点无限扩展,可满足小型、中型的单(多)项目管理。
工程设备在线监测管理系统WMWS自动预警功能介绍