利用递归来求解这道题会相对简便一点 求得是平衡二叉树(不了解的话 可以去看看二叉树的理论基础) 所以每个节点的左右孩子的高度差必须小于等于1 。
这里要区别二叉树的高度和深度
二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。
二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。
求高度的话 就是利用后序遍历(左右中)
求深度的话 就是利用前序遍历(中左右)
力扣上可以运行的代码:
var isBalanced = function(root) {
// 定义一个函数 求二叉树左右孩子的高度差
// 递归三部曲 + 后序遍历 左右中 当左子树右子树高度差大于1的话 就返回-1
// 第一步:确定递归的返回值以及参数
let deepHeight = function(node){
// 确定递归的终止条件
if(node === null)return 0
// 确定单层递归逻辑
let leftHeight = deepHeight(node.left) // 左子树的高度 左
// 当判断左子树不为平衡二叉树的时候 返回-1
if(leftHeight === -1)return -1
// 同理
let rightHeight = deepHeight(node.right) // 右
if(rightHeight === -1)return -1
if(Math.abs(leftHeight - rightHeight) > 1){ // 中
return -1;
}else{
// 说明是平衡二叉树
return 1 + Math.max(leftHeight,rightHeight)
}
}
return !(deepHeight(root) === -1)
};