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

day144—递归—平衡二叉树(LeetCode-110)

题目描述

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

示例 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),采用「后序遍历 + 递归剪枝」的思路实现,在计算子树高度的同时校验平衡条件,时间复杂度O(n)n为节点数),空间复杂度O(h)h为树的高度),是该问题的最优解法。

核心逻辑

代码将 “计算子树高度” 和 “校验平衡条件” 融合在同一个递归函数中,通过返回特殊值-1实现剪枝,避免重复遍历:

  1. 递归辅助函数node_height:既计算节点的高度,又实时校验平衡条件:
    • 边界条件:空节点高度为0
    • 递归计算左子树高度left_h,若左子树已不平衡(left_h=-1),直接返回-1(剪枝,无需计算右子树);
    • 同理递归计算右子树高度right_h,若右子树不平衡,直接返回-1
    • 校验当前节点平衡条件:若左右子树高度差的绝对值 > 1,返回-1(标记当前子树不平衡);
    • 若平衡,返回当前节点的高度(max(left_h, right_h)+1);
  2. 主函数isBalanced
    • 空树直接返回true(空树是平衡的);
    • 调用node_height(root),若返回值不为-1,说明整棵树平衡,返回true,否则返回false

总结

  1. 核心思路:后序遍历(先算左右子树高度,再判断当前节点),在计算高度的同时校验平衡,用-1剪枝避免无效递归;
  2. 关键优化:相比 “先算所有节点高度,再逐个校验” 的暴力解法,该思路只需一次遍历,时间效率更高;
  3. 效率特点:每个节点仅被访问一次,时间O(n);递归栈空间取决于树的高度,平衡树为O(log n),退化为链表时为O(n)

函数源码:

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int node_height(TreeNode* node){ if(!node) return 0; int left_h=node_height(node->left); if(left_h==-1){ return -1; } int right_h=node_height(node->right); if(right_h==-1){ return -1; } if(abs(right_h-left_h)>1){ return -1; } return max(left_h,right_h)+1; } bool isBalanced(TreeNode* root) { if(!root) return true; return node_height(root)!=-1; } };
http://www.jsqmd.com/news/264099/

相关文章:

  • 2026年市场可靠的活性炭箱优质厂家哪家靠谱,滤筒除尘器/旋风除尘器/活性炭箱/催化燃烧,活性炭箱生产商口碑排行 - 品牌推荐师
  • STM32单片机分享:智能鱼缸系统
  • 2026年国内可靠的活性炭箱制造厂家推荐排行榜,RTO/旋风除尘器/沸石转轮一体机/除尘器,活性炭箱公司推荐榜 - 品牌推荐师
  • 交通仿真软件:VISSIM_(22).交通仿真在城市规划中的应用
  • STM32单片机分享:智能书桌系统
  • day145—递归—二叉树的右视图(LeetCode-199)
  • 理性选择RTO:基于用户反馈的供货商横向评测,沸石转轮/活性炭箱/RTO/沸石转轮一体机,RTO源头厂家排行榜 - 品牌推荐师
  • 小程序计算机毕设之基于微信小程序的大学生科技竞赛管理系统的设计与实现基于springboot+微信小程序的院竞赛管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 2026苏州新房装修大揭秘:这些服务优质的公司你不能错过! - 品牌测评鉴赏家
  • Flink Elasticsearch Connector 从 0 到 1 搭一个高吞吐、可容错的 ES Sink
  • Flink Firehose Sink 把实时流数据稳定写进 Amazon Kinesis Data Firehose
  • GESP认证C++编程真题解析 | 202309 五级
  • vscode的.vscode文件记录
  • 人工智能之数据分析 Pandas:第九章 性能优化 - 实践
  • 2026年国内最好的沸石转轮+CO定制厂家口碑推荐榜单,除尘器/沸石转轮一体机/滤筒除尘器/催化燃烧,沸石转轮生产商排名 - 品牌推荐师
  • 小程序毕设项目:基于springboot+微信小程序的院竞赛管理系统(源码+文档,讲解、调试运行,定制等)
  • 开发智力的课堂
  • 详细介绍:法律大模型微调:基于 LLaMA-Factory 的指令微调方案
  • 【毕业设计】基于springboot+微信小程序的院竞赛管理系统(源码+文档+远程调试,全bao定制等)
  • 2026年国内知名的活性炭箱供应厂家联系方式,RTO/旋风除尘器/催化燃烧/活性炭箱/滤筒除尘器,活性炭箱品牌怎么选择 - 品牌推荐师
  • 2026苏州厂房装修大揭秘:这几家公司不容错过! - 品牌测评鉴赏家
  • 2026极简风爱好者必看!这些宝藏装修公司绝了 - 品牌测评鉴赏家
  • 苏州装修宝藏公司大盘点,口碑爆棚不踩雷! - 品牌测评鉴赏家
  • GESP认证C++编程真题解析 | 202309 六级
  • 第一、二、三章 习题总结
  • 人群仿真软件:AnyLogic_(4).行人库功能详解
  • GESP认证C++编程真题解析 | 202306 一级
  • 提示工程架构师必学:用Few-shot Learning增强提示情境感知的AI技巧
  • 2026苏州装修哪家强?覆盖不同业主的装修需求的十大装修公司! - 品牌测评鉴赏家
  • 用 Python 实现芯片性能优化模型