平衡二叉树:任意节点左右子树深度差不大于1
暴力,从上到下判断,每个子树是否是平衡二叉树
1、写一个函数,计算树的深度(即二叉树的最大深度那道题)
2、从上到下递归判断子树是否为平衡,即高度差是否小于2,不小于返回false,小于继续迭代,直到达到null,证明这个子树到头了是平衡的返回true,所以这是一个终止条件。
左右子树相与,都平衡,才返回平衡true
public boolean isBalanced(TreeNode root) {
if(root==null)return true;
if(Math.abs(high(root.left)-high(root.right))>1)return false;
return isBalanced(root.left)&&isBalanced(root.right);
}
public int high(TreeNode root){
if(root==null)return 0;
return Math.max(high(root.left),high(root.right))+1;
}
这样想其实有点凌乱。
一个树如果平衡,那这个节点它自己的左右子树高度差要<=1,且它的左子树是平衡,右子树是平衡
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);
}