平衡二叉树
/**
* 判断一颗二叉树是否是一个高度平衡二叉树:自顶向下递归:暴力求解
* 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
* @param root
* @return
*/
public boolean isBalanced(TreeNode root) {
if(root == null){
return true;
}
//所有子树都需要满足平衡树性质
Boolean curIsBalanced = Math.abs(depth(root.left)-depth(root.right)) <=1;
//当前子树的左子树 是否是平衡树
Boolean leftIsBalanced = isBalanced(root.left);
//当前子树的右子树 是否是平衡树
Boolean rightIsBalanced = isBalanced(root.right);
//所有子树都需要满足平衡树性质
return curIsBalanced && leftIsBalanced && rightIsBalanced;
}
/**
* 求一棵树的最高深度
* @return
*/
private int depth(TreeNode root){
if(root == null){
return 0;
}
return Math.max(depth(root.left),depth(root.right))+1;
}