文章目录
1.题目描述
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 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
2.思路
2.1 代码
平衡二叉树需要满足两个条件:
- 左子树和右子树同时为平衡二叉树
- 左子树和右子树的高度差绝对值小于2
因此根据这两个条件,使用类TreeInfo存储子树信息,TreeInfo类中变量有该子树的高度以及该子树是否平衡。然后利用TreeInfo进行递归最后得到输入变量是否平衡,代码如下:
class Solution {
public boolean isBalanced(TreeNode root) {
return process(root).isBalanced;
}
public TreeInfo process(TreeNode root) {
if (root == null) {
return new TreeInfo(0, true);
}
TreeInfo leftInfo = process(root.left);
TreeInfo rightInfo = process(root.right);
int depth = Math.max(leftInfo.depth, rightInfo.depth) + 1;
boolean isBalanced = Math.abs(leftInfo.depth - rightInfo.depth) < 2 && leftInfo.isBalanced && rightInfo.isBalanced;
return new TreeInfo(depth, isBalanced);
}
static class TreeInfo{
int depth;
boolean isBalanced;
public TreeInfo(int depth, boolean isBalanced) {
this.depth = depth;
this.isBalanced = isBalanced;
}
}
}
2.2 测试结果
测试通过
3.总结
平衡二叉树需要满足以下两个条件
- 左子树和右子树同时为平衡二叉树
- 左子树和右子树的高度差绝对值小于2