剑指offer 60. 平衡二叉树

简介: 剑指offer 60. 平衡二叉树

题目描述

输入一棵二叉树的根结点,判断该树是不是平衡二叉树

如果某二叉树中任意结点的左右子树的深度相差不超过 1,那么它就是一棵平衡二叉树。

注意:

  • 规定空树也是一棵平衡二叉树。

数据范围

树中节点数量 [0,500]。

样例

输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示,
  5
 / \
7  11
  /  \
 12   9
输出:true

方法一:dfs O(n)

这道题只要求我们去判断该树是否为平衡二叉树,不用我们写出完整的代码,如果想对平衡二叉树深入了解的话可以去看看我之前的图解,平衡二叉树也是数据结构必须掌握的知识,传送门放在这里了~


平衡二叉树详细讲解


我们回到这题,如果结果返回 true 则需要满足:


如果 root 是空,则直接返回 true 。

当前 root 需要满足左子树的最大深度与右子树的最大深度只差的绝对值小于等于 1 。

右子树和左子树也需要满足平衡树的要求。

这道题其实是上一道题即求二叉树的深度的扩展,深度的求法和那道题一模一样,先去递归到二叉树的叶子结点再回溯,返回的值是 max(左子树深度,右子树深度) + 1 。


然后我们只需要用获得的深度进行判断,同样也是递归到叶子结点,然后回溯判断每个结点是否都满足平衡二叉树的要求。

/**
 * 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 {
public:
    int dfs(TreeNode* root) {
        if (!root)   return 0;
        int left = dfs(root->left), right = dfs(root->right);
        return max(left, right) + 1;
    }
    bool isBalanced(TreeNode* root) {
        if (!root)   return true;
        return isBalanced(root->left) && isBalanced(root->right) && abs(dfs(root->left) - dfs(root->right)) <= 1;
    }
};

欢迎大家在评论区交流~

目录
相关文章
|
Go 数据库 数据安全/隐私保护
Navicat 16.2安装和试用教程详解
Navicat 16.2安装和试用教程详解
508 0
|
JavaScript 数据格式 容器
echarts图表-饼图、柱状图、折线图、散点图之间相互切换
echarts图表-饼图、柱状图、折线图、散点图之间相互切换
710 0
|
JavaScript 前端开发
JavaScript的命名规则
JavaScript的命名规则
513 0
|
存储 JavaScript 安全
Node中的AsyncLocalStorage 使用问题之AsyncLocalStorage与node:async_hooks模块的问题如何解决
Node中的AsyncLocalStorage 使用问题之AsyncLocalStorage与node:async_hooks模块的问题如何解决
272 3
|
存储 关系型数据库 MySQL
MVCC:深入解析多版本并发控制机制
【4月更文挑战第20天】MVCC是数据库并发控制的关键技术,通过保存数据多个版本,使读写操作无锁并发,减少锁竞争,提高并发性能。它保证事务看到一致数据快照,避免并发问题,并支持事务回滚与恢复。MVCC广泛应用于PostgreSQL、InnoDB等,提供时间旅行查询和无锁读等功能,对于构建高性能、高并发数据库系统至关重要。
930 13
|
关系型数据库 MySQL BI
python报表自动化系列 - 通过Python使用MySQL数据库
python报表自动化系列 - 通过Python使用MySQL数据库
281 0
|
JSON 测试技术 数据格式
MessagePack 和System.Text.Json 序列化和反序列化对比
MessagePack 和System.Text.Json 序列化和反序列化对比
460 0
MessagePack 和System.Text.Json 序列化和反序列化对比
|
人工智能 移动开发 API
热门的免费可用的 API 大全整理
热门的免费可用的 API 大全整理
341 0
|
存储 机器学习/深度学习 人工智能
ClickPaaS模型驱动的低代码平台实践
ClickPaaS模型驱动的低代码平台实践
868 0
|
存储 API 数据格式
Qt通过QSttings类读取*.ini配置文件
Qt通过QSttings类读取*.ini配置文件
438 0

热门文章

最新文章