力扣每日一题110:平衡二叉树

devtools/2024/9/25 11:01:29/

题目

简单

给定一个二叉树,判断它是否是 

平衡二叉树

  

示例 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] 内
  • -104 <= Node.val <= 104

面试中遇到过这道题?

1/5

通过次数

608.6K

提交次数

1M

通过率

58.4%

方法一:自顶向下的递归

二叉树是平衡二叉树的三个条件

1、左子树与右子树的高度差<=1

2、左子树是平衡二叉树

3、右子树是平衡二叉树

class Solution {
public:int height(TreeNode *root){if(root==NULL) return 0;return max(height(root->left),height(root->right))+1;}bool isBalanced(TreeNode* root) {if(!root) return true;return abs(height(root->left)-height(root->right))<=1&&isBalanced(root->left)&&isBalanced(root->right);}
};

时间复杂度:O(n^{2})

空间复杂度:O(n)

方法二:自底向上的递归

方法一由于是自顶向下递归,因此对于同一个节点,函数 height 会被重复调用,导致时间复杂度较高。如果使用自底向上的做法,则对于每个节点,函数 height 只会被调用一次。

自底向上递归的做法类似于后序遍历,对于当前遍历到的节点,先递归地判断其左右子树是否平衡,再判断以当前节点为根的子树是否平衡。如果一棵子树是平衡的,则返回其高度(高度一定是非负整数),否则返回 −1。如果存在一棵子树不平衡,则整个二叉树一定不平衡。

官方题解

class Solution {
public:int height(TreeNode* root,bool &balanced) {if (root == NULL) {return 0;}int leftheight=height(root->left,balanced);int rightheight=height(root->right,balanced);if(abs(leftheight-rightheight)>1||!balanced){balanced=false;return -1;}return max(leftheight,rightheight)+1;}bool isBalanced(TreeNode* root) {bool balanced=true;return height(root,balanced) >= 0;}
};

时间复杂度:O(n)

空间复杂度:O(n)


http://www.ppmy.cn/devtools/36892.html

相关文章

AI去衣技术在动画制作中的应用

随着科技的发展&#xff0c;人工智能&#xff08;AI&#xff09;已经在各个领域中发挥了重要作用&#xff0c;其中包括动画制作。在动画制作中&#xff0c;AI去衣技术是一个重要的工具&#xff0c;它可以帮助动画师们更加高效地完成工作。 AI去衣技术是一种基于人工智能的图像…

VUE v-for 数据引用

VUE 的数据引用有多种方式。 直接输出数据 如果我们希望页面中直接输出数据就可以使用&#xff1a; {{ pageNumber }}双括号引用的方式即可。 在 JavaScript 中引用 如果你需要直接在代码中使用&#xff0c;直接使用变量名就可以了。 上面这张小图&#xff0c;显示了引用的…

【Linux-I.MX6ULL裸机学习】中断向量表

代码来自于正点原子阿尔法Linux开发板光盘 比如在中断向量表中规定了&#xff1a;在某个地址0x80000A对应着某个中断服务函数&#xff0c;那么在产生这个中断时&#xff0c;就会从0x80000A这个地址去读取中断服务函数&#xff0c;并执行。 如果想改变这个地址&#xff0c;也就是…

05-07 周二 Python使用并行程序取代串行加速运行,样例程序演示

简介 在进行FastBuild优化的时候&#xff0c;需要串行的获取需要的组件的特征&#xff0c;之前是串行进行的&#xff0c;但是由于之前的设计存在问题&#xff0c;因此&#xff0c;总是很低效&#xff0c;主要是如下的原因&#xff1a; 镜像需要先下载&#xff0c;然后检测运行环…

SD-Turbo部署

stabilityai/sd-turbo 官网 2023 年 11 月 30 日 继推出 SDXL-Turbo 之后&#xff0c;我们又发布了SD-Turbo。 2023 年 11 月 28 日 我们正在发布 SDXL-Turbo&#xff0c;一种闪电般快速的文本到图像模型。除了模型之外&#xff0c;我们还发布了技术报告 用法&#xff1…

STM32程序进入hardfault_handler()

背景&#xff1a; 假期前一直在修改代码&#xff0c;没有边改边测。节后回来测试代码&#xff0c;发现程序上电后很快就进入hardfault_handler&#xff08;&#xff09;中断。 导致程序反复复位。 查找原因&#xff1a; 在程序的_it.c文件里有几句代码&#xff0c;如果注释…

Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置&#xff0c;然后在project的build.gradle.kts中使用如下方式引入&#xff1a; apply(from "./config.gradle") 缺点&#xff1a;在project的module中引用无任何提示&#xff0c;无法跳转到指定引用 一、创建versio…

02-XSS渗透测试步骤

三、XSS渗透测试步骤 xss攻击&#xff0c;一定牢记"输入输出"&#xff0c;输入指的是攻击者对服务器网页输入恶意代码 输出指的是浏览器接受到代码后能解析出并输出到前端。 xss原理就是开发者没有对输入内容进行过滤&#xff0c;导致通过攻击者进行构造的前端代码…