题目链接
110. 平衡二叉树
题目描述
给定一个二叉树,判断它是否是平衡二叉树
示例 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
提示:
- 树中的节点数在范围 [0, 5000] 内
- 104 <= Node.val <= 104
代码解答
public class IsBalanced {
public boolean isBalanced(TreeNode root) {
if (root == null) {
return true;
}
return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
}
//求高度——>求根节点的最大深度
private int height(TreeNode node) {
if (node == null) {
return 0;
} else {
return Math.max(height(node.left), height(node.right)) + 1;
}
}
}
解题步骤:
- 对根节点进行判断,如果是空则是平衡二叉树。
- 根节点如果不为空,判断左子树与右子树的高度差是否小于等于1。*注意:平衡二叉树的条件是 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。*所以还要通过递归对左子树和右子树进行判断。
- 建一个求树的高度的函数,二叉树的高度就是二叉树的最大深度。
总结
前面我们学习了二叉树的最大深度和最小深度,此处只需记住:二叉树的高度就是二叉树的最大深度。