剑指 Offer 55 - II. 平衡二叉树 / LeetCode 110. 平衡二叉树(二叉树后序遍历)

news/2024/10/18 0:20:32/

题目:

链接:剑指 Offer 55 - II. 平衡二叉树;LeetCode 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] 内
  • -104 <= Node.val <= 104

后序遍历:

后序遍历过程中,对每个节点,计算左右子树深度,比较左右深度差判断是否平衡,若平衡则将较大子树的深度向上传递。

代码:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
private:bool flag = true;  // 是否平衡
public:bool isBalanced(TreeNode* root) {depth(root);return flag;}int depth(TreeNode* root) {  // 搜索子树的深度if(root == nullptr) return 0;int leftDepth = depth(root->left);  // 左子树深度int rightDepth = depth(root->right);  // 右子树深度if(abs(leftDepth - rightDepth) > 1) {  // 左右子树深度差大于1,则整棵树不平衡flag = false;return -1;}return max(leftDepth + 1, rightDepth + 1);  // 向上传递该子树深度}
};

时间复杂度O(N)。每个节点处判断一次平衡。
空间复杂度O(N)。递归栈所需的空间在二叉树退化为链表时取得最大值。


http://www.ppmy.cn/news/533333.html

相关文章

MySQL权限控制及日志管理

MySQL权限控制及日志管理 用户权限管理 创建用户 CREATE USER 用户名IP地址 [ IDENTIFIED BY 密码 ]&#xff1b;GRANT SELECT ON *.* TO 用户名’IP地址’ IDENTIFIED BY "密码"&#xff1b;--创建一个用户名为Usr1 密码为 Usr1.mysql的用户 并授权 CREATE USER…

【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 文章目录 系列文章目录前言一、所有权(Ownership)1.1.、所有权(Ow…

【JUC(一)】进程、线程与管程

1 进程 1.1 概述 进程&#xff1a;程序是静止的&#xff0c;进程实体的运行过程就是进程&#xff0c;是系统进行资源分配的基本单位 进程的特征&#xff1a;并发性、异步性、动态性、独立性、结构性 线程&#xff1a;线程是属于进程的&#xff0c;是一个基本的 CPU 执行单元…

【windows10】查看计算机的WIFI密码

【windows10】查看计算机的WIFI密码 1、背景2、操作 1、背景 无线路由器设置完密码后&#xff0c;经常会忘记。 当有新的设备需要接入网络的时候&#xff0c;如何能快速获得wifi密码呢&#xff1f; 本博客分享一种通过已联网的计算机来查看wifi密码。 2、操作 -step-2.1、打…

【软件工程】测试九

文章目录 单选题判断题填空题 单选题 软件维护的副作用&#xff0c;是指()。 A. 因修改软件而造成的错误 B. 开发时的错误 C. 隐含的错误 D. 运行时误操作 正确答案&#xff1a; A 为了适应软硬件环境变化而修改软件的过程是( )。 A. 适应性维护 B. 校正性维护 C. 完善性维护 …

在Linux上卸载和重新安装NVM

NVM&#xff08;Node Version Manager&#xff09;是一个方便的工具&#xff0c;用于在同一台机器上管理和切换不同版本的Node.js。有时候&#xff0c;我们可能需要卸载NVM并重新安装它&#xff0c;以解决一些问题或进行更新。在本篇博客中&#xff0c;我们将提供在Linux上卸载…

VMware虚拟机黑屏死机解决方法

1.问题&#xff1a;虚拟机开机右一个centos出现黑屏&#xff0c;而其他的centos是正常的。 2.解决步骤&#xff1a; 1&#xff09;在Windows系统下的命令符窗口&#xff08;cmd&#xff09;,以系统管理员的身份进入。 2&#xff09;输入“netsh winsock reset”,如果出现成功…

安卓卡死,卡屏,死机,黑屏

(662条消息) 黑屏定屏那些事 - 系统机制&#xff0c;分析套路和实战&#xff08;系统篇&#xff09;_android黑屏问题分析_内核工匠的博客-CSDN博客 Linux内核死机调试方法总结,linux 内核卡死 - 开发者博客 (4xseo.com)