思路: 从根节点开始,判断左右子树是否是平衡的,如果都是平衡的,则判断左右子树的高度差是否不大于1
function depth(root)
{
if( ! root)
{
return 0
}
return 1 + Math.max(depth(root.left), depth(root.right))
}
/*
* @param root
* @param depth 用来返回已经计算过的子树的深度,防止再次计算浪费性能
*/
function isBalance(root, depth)
{
if( ! root)
{
return true
}
let depthLeft
let depthRight
if( ! isBalance(root.left, depthLeft))
{
return false
}
if( ! isBalance(root.right, depthRight))
{
return false
}
if(Math.abs(depthLeft - depthRight) > 1)
{
return false
}
depth = Math.max(depthLeft, depthRight)
return true
}
复杂度: O(n)