二叉树——110. 平衡二叉树

简介: 本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助

1 题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

2 题目示例

image.png

image.png

示例 3:

输入:root = []
输出:true

3 题目提示

树中的节点数在范围 [0, 5000] 内
-104 <= Node.val <= 104

4 思路

这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 11,则二叉树是平衡二叉树。根据定义,一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树,因此可以使用递归的方式判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下或者自底向上。

image.png

有了计算节点高度的函数,即可判断二叉树是否平衡。具体做法类似于二叉树的前序遍历,即对于当前遍历到的节点,首先计算左右子树的高度,如果左右子树的高度差是否不超过 11,再分别递归地遍历左右子节点,并判断左子树和右子树是否平衡。这是一个自顶向下的递归的过程。

复杂度分析
时间复杂度:o(n²),其中n是二叉树中的节点个数。最坏情况下,二叉树是满二叉树,需要遍历二叉树中的所有节点,时间复杂度是O(n)。
对于节点p,如果它的高度是d,则 height(p)最多会被调用d次(即遍历到它的每一个祖先节点时)。对于平均的情况,一棵树的高度h满足O(h)= O(logn),因为d<h,所以总时间复杂度为O(n logn)。对于最坏的情况,二叉树形成链式结构,高度为O(n),此时总时间复杂度为o(n²)。
空间复杂度:O(n),其中n是二叉树中的节点个数。空间复杂度主要取决于递归调用的层数,递归调用的层数不会超过n。

5 我的答案

class Solution {
    public boolean isBalanced(TreeNode root) {
        if (root == null) {
            return true;
        } else {
            return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
        }
    }

    public int height(TreeNode root) {
        if (root == null) {
            return 0;
        } else {
            return Math.max(height(root.left), height(root.right)) + 1;
        }
    }
}
相关文章
|
4月前
|
算法 前端开发
2583. 二叉树中的第 K 大层和
2583. 二叉树中的第 K 大层和
40 0
|
9月前
|
存储 C++
二叉树搜索树的应用
二叉树搜索树的应用
49 1
|
4月前
|
存储
二叉树详解
二叉树详解
37 2
|
4月前
|
C++
平衡二叉树(C++)
平衡二叉树(C++)
30 1
|
11月前
|
存储
二叉树的相关列题!!
二叉树的相关列题!!
66 0
|
存储 算法 关系型数据库
有了二叉树,平衡二叉树为什么还需要红黑树
有了二叉树,平衡二叉树为什么还需要红黑树
86 0
有了二叉树,平衡二叉树为什么还需要红黑树
|
存储 机器学习/深度学习
认识一棵二叉树
大家好,我是王有志。今天要学习的是编程中绕不开的结构--树,无论是二分搜索树,红黑树,B+树,还是的决策树和随机森林,都和树息息相关。
62 0
认识一棵二叉树
|
算法
二叉搜索树、平衡二叉树
一、二叉搜索树 这里我们不用太多书面化的语言来定义,笔者认为在讨论数据结构、算法相关的内容时用太多书面化、学术化的语言是一种让人很烦的事情。咬文嚼字,不便于读者理解。 简单来说二叉树搜索树,其实就是用来做二分查找的一种二叉树。 特点是:根节点的左子树值均小于根节点的值,根节点的右子树值均大于根节点的值。 比如123 4 567建树的结果就是
50 0
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)