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

[E二叉树] lc110. 平衡二叉树(dfs+自底向上)

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:110. 平衡二叉树

题单:

    1. 链表、二叉树与一般树(前后指针/快慢指针/DFS/BFS/直径/LCA)
    • §2.3 自底向上 DFS

2. 题目解析

思路:

  • 记录每个节点的左右子树的高度,并判断高度差是否大于 1 即可。
  • 二叉树计算高度,可看 [E二叉树] lc104. 二叉树的最大深度(dfs+自顶向下)
  • 注意本题可以剪枝优化。如果有任意两个节点的高度差大于 1 了,那么说明整个树都不平衡,则可以直接 return 即可。
  • 故,将代码集中在 高度计算中实现代码逻辑即可。

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( n ) O(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 dfs(TreeNode* root) {
        if (!root) return 0;
        int hl = dfs(root->left);
        if (hl == -1) return -1;

        int hr = dfs(root->right);
        if (hr == -1) return -1;

        if (abs(hr - hl) > 1) return -1;

        return max(hl, hr) + 1;
    }
    bool isBalanced(TreeNode* root) {
        return dfs(root) != -1;
    }
};

http://www.kler.cn/a/285158.html

相关文章:

  • NoSQL数据库与关系型数据库的主要区别
  • 01-Ajax入门与axios使用、URL知识
  • MySQL:CRUD
  • redhat虚拟机
  • Hadoop(环境搭建篇)
  • PostgreSQL 开启密码验证插件
  • Java技术栈 —— Spark入门(二)之实时WordCount
  • 基于微信小程序的电动车租赁系统---附源码97332
  • 遇到的BUG及解决方法
  • 【读书笔记-《30天自制操作系统》-12】Day13
  • 监控平台之上报(未完成)
  • Python算法工程师面试整理-Python 编程技巧
  • 使用Ansible stat模块检查目录是否存在
  • 【Docker】Dockerfile实列-Nginx镜像构建
  • 类与ES6类之间的继承
  • 叶斯神经网络(BNN)在训练过程中损失函数不收敛或跳动剧烈可能是由多种因素
  • 全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型
  • P02-Java流程控制基本结构
  • codetest
  • Linux下递归设置目标目录及其子目录和文件的权限
  • Qt/C++地址转坐标/坐标转地址/逆地址解析/支持百度高德腾讯和天地图
  • 项目策划书六度自由双足机器人
  • WHAT - 通过 react-use 源码学习 React(Animations 篇)
  • Qt QTableWidget可编辑设置,设置部分可编辑
  • 线性表之静态链表
  • Jenkins发邮件功能如何配置以实现自动化?