描述
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
样例解释:
样例二叉树如图,为一颗平衡二叉树
注:我们约定空树是平衡二叉树。
数据范围:�≤100n≤100,树上节点的val值满足 0≤�≤10000≤n≤1000
要求:空间复杂度�(1)O(1),时间复杂度 �(�)O(n)
输入描述:
输入一棵二叉树的根节点
返回值描述:
输出一个布尔类型的值
示例1
输入:
{1,2,3,4,5,6,7}
复制
返回值:
true
复制
示例2
输入:
{}
复制
返回值:
true
思路:
从题中给出的有效信息:
- 左右两个子树的高度差的绝对值不超过1
- 左右两个子树都是一棵平衡二叉树
故此 首先想到的方法是使用递归的方式判断子节点的状态
方法一:dfs
具体做法:
如果一个节点的左右子节点都是平衡的,并且左右子节点的深度差不超过 1,则可以确定这个节点就是一颗平衡二叉树。
具体过程如下图所示:
public boolean IsBalanced_Solution(TreeNode root) {
if (root == null) return true;
return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right) &&
Math.abs( deepth(root.left) - deepth(root.right)) <= 1;
}
public int deepth(TreeNode root) {
if (root == null)return 0;
return Math.max(deepth(root.left), deepth(root.right)) + 1;
}
复杂度分析:
- 时间复杂度:O(n^2), n 是二叉树中的节点个数
- 空间复杂度:O(n),主要是递归方,占用本地方法栈,而递归层数不会超过n次