题目描述:

给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例:

image.png
image.png
image.png

解题思路:先计算每个节点的左右子树的深度(用之前刷过的的计算最大深度的方法:maxDepth),然后计算左右子树差的绝对值,看是否超过1.

解:

class Solution {

boolean flag=true;//默认是平衡二叉树

public boolean isBalanced(TreeNode root) {

maxDepth(root); //调用计算树的深度的方法

return flag;

}

public int maxDepth(TreeNode root){

if(root==null){//树为空,则深度为0

return 0;

}

int leftDepth=maxDepth(root.left);//递归调用,计算二叉树每个节点的深度

int rightDepth=maxDepth(root.right);//每计算出一个节点的左右子树的深度就进行判断

//判断计算得到的节点的左右两个子树的高度差的绝对值是否超过1

if(Math.abs(leftDepth-rightDepth)>1){//只要其中一个节点的左右两个子树的高度差的绝对值超1

flag=false; //它就不是平衡二叉树

}

return Math.max(leftDepth,rightDepth)+1;//返回树的深度(每个节点的深度)

}

}