You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用递归判断二叉树是否平衡?现有递归实现出错如何修正?

平衡二叉树判定代码错误分析与修复

原代码核心错误

  • 返回值类型混乱:递归函数前两个分支返回的是数值类型的高度,后续判断分支返回的是布尔值,递归调用时Math.min/Math.max会把布尔值隐式转换为0/1参与计算,结果完全不符合预期
  • 平衡二叉树定义理解错误:平衡二叉树要求所有节点的左右子树高度差绝对值≤1,而非整棵树的最大高度减最小高度≤1,你的逻辑无法检测子树内部的不平衡情况
  • 边界条件高度计算错误:空节点高度通常统一定义为0或-1,叶子节点(无左右子节点)的高度对应应为1或0,你这里叶子节点返回0的计算逻辑本身也不统一

测试用例验证:三层左斜树(根→左孩子→左孙子,无右节点)属于典型的不平衡树,原代码运行后会返回true,进一步验证了上述问题的存在。

正确实现方案

这里给出自底向上的高效实现,时间复杂度O(n),避免重复计算高度:

function isBalanced(rootNode) {
    // 辅助函数:返回子树高度,若子树不平衡直接返回-1作为标记
    function getHeight(node) {
        if (!node) return 0; // 空节点高度统一定义为0
        const leftHeight = getHeight(node.left);
        // 左子树已不平衡,无需继续计算直接返回标记
        if (leftHeight === -1) return -1;
        const rightHeight = getHeight(node.right);
        // 右子树已不平衡,无需继续计算直接返回标记
        if (rightHeight === -1) return -1;
        // 当前节点左右子树高度差超过1,标记为不平衡
        if (Math.abs(leftHeight - rightHeight) > 1) {
            return -1;
        }
        // 返回当前子树的实际高度
        return Math.max(leftHeight, rightHeight) + 1;
    }
    // 结果不等于-1则代表整棵树为平衡二叉树
    return getHeight(rootNode) !== -1;
}

内容的提问来源于stack exchange,提问作者caseyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:15:06