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

JS实现最大二叉堆异常:插入数组返回undefined问题排查

最大二叉堆实现修正方案

问题分析

你的代码存在三个核心问题:

  • 函数未返回值,导致调用后输出undefined
  • 错误地将整个输入数组作为单个元素推入堆中,而非逐个插入数组内的元素
  • 缺少批量插入的遍历逻辑,无法正确构建堆

修正后的代码

function buildMaxHeap(arr) {
  const values = [];

  // 单个元素插入堆并执行上浮操作
  function insert(element) {
    values.push(element);
    let index = values.length - 1;
    const current = values[index];

    while (index > 0) {
      const parentIndex = Math.floor((index - 1) / 2);
      const parent = values[parentIndex];

      // 最大堆规则:当前元素大于父节点则交换
      if (parent <= current) {
        [values[parentIndex], values[index]] = [current, parent];
        index = parentIndex;
      } else {
        break;
      }
    }
  }

  // 遍历输入数组,逐个插入元素
  for (const num of arr) {
    insert(num);
  }

  return values;
}

console.log(buildMaxHeap([3, 4, 31, 6])); // 输出 [31, 6, 4, 3]

修正说明

  1. 添加返回值:函数末尾返回values数组,解决undefined的问题
  2. 拆分插入逻辑:封装insert函数单独处理单个元素的上浮操作,符合堆的插入规则
  3. 批量插入处理:遍历输入数组,依次将每个元素插入堆中,正确构建最大堆
  4. 优化交换写法:使用解构赋值简化元素交换代码,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:22:45