题目
给定一个二叉树,判断它是否是 平衡二叉树
思路
要判断是否是平衡二叉树
要先知道 什么是平衡二叉树
平衡二叉树(AVL树)是一种特殊的二叉搜索树,其特点是每个节点的左子树和右子树的高度差(即平衡因子)绝对值不超过1。它通过旋转操作来保持树的平衡,从而提高查找、插入和删除操作的效率
我们先知道定义就好了
每个节点的左右子树高度差不超过1
为了优化,减少递归
我们定义 如果一个子树返回的是-1,那么它就是不平衡的, 这棵二叉树就算是不平衡的,我们就继续把-1返回给父节点
判断到-1的话,就返回,
一直到顶树, 然后判断是否是-1
代码
//自下而上
var isBalanced = function(root) {
function getHeight(node){
//子树是空节点,返回0
if(!node)return 0;
const leftHeight= getHeight(node.left);
if(leftHeight === -1){
return -1;
}
const rightHeight = getHeight(node.right);
if( rightHeight=== -1){
return -1;
}
if(Math.abs(leftHeight - rightHeight) >1){
return -1;
}
//没有判断到-1,就返回树的高度
return Math.max(leftHeight,rightHeight) + 1;
}
return getHeight(root) !== -1;
};