算法挑战45: 平衡二叉树

7 阅读1分钟

题目

给定一个二叉树,判断它是否是 平衡二叉树

思路

要判断是否是平衡二叉树

要先知道 什么是平衡二叉树

平衡二叉树(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;
};