解题思路:
1.首先写一个返回深度的函数d
2.写一个遍历函数t
3.在t中首先判断,r是否为空(为空则此时就是平衡二叉树,返回true),然后判断是否为叶子节点(r.left ===null && r.right === null)若是则返回true,最后判断,其左子树的深度与右子树的深度之差是否大于1.若是则返回false
4.到了这里,则对r的左右子树分别调用t,返回其左右子树的与(&&)关系
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isBalanced = function(root) {
function d(r){
if(!r) return 0
if(r.left === null && r.right === null) return 1
return Math.max(d(r.left),d(r.right)) +1
}
function t(r){
if(!r) return true
if(r.left === null && r.right === null) return true
if(d(r.left) - d(r.right) > 1 || d(r.right) - d(r.left) >1 ) return false
return t(r.left) && t(r.right)
}
return t(root)
};