该题目出自:剑指 Offer 55 - II. 平衡二叉树
题目描述:
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。
示例 :
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
知识点
1.什么是平衡二叉树?
如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
2.怎么计算一棵树的深度?
【运用递归方法的思想】
特殊情况:如果节点为空时,则深度为0;
树的深度的求解方法:max(左子树深度,右子树深度)+1
代码实现:
private int depth(TreeNode root){
if(root==null) return 0;
return Math.max(depth(root.left),depth(root.right)) +1;
}
解题思路
明确了以上两个知识点,应用递归法解决【强烈推荐递归法的思路,可以大大减少代码量】
解决这道题的思路如下:
0.特殊情况:如果节点为空时,则返回true;
1.对根节点进行判断,分别求出它的左右子树的深度,且二者相差不超过1,这为判断该树是否平衡的条件一;
2.根节点的左右子树也得为平衡树,即它们分别的左右子树深度差不超过1,若其中一个不为平衡树,则整棵树都不是平衡的,明显得用到递归的方法去遍历判断。
代码块
class Solution {
public boolean isBalanced(TreeNode root) {
if(root==null){return true;}//特殊情况
//递归法解答,三个条件缺一不可进行判断。
return Math.abs(depth(root.left)-depth(root.right))<=1
&&isBalanced(root.left)&&isBalanced(root.right);
}
private int depth(TreeNode root){
//计算树的深度的方法
if(root==null){return 0;}//特殊情况
return Math.max(depth(root.left),depth(root.right)) +1;}
}