36 lines
900 B
JavaScript
36 lines
900 B
JavaScript
const numbers = [5, 0, 8, 2, 1, 4, 7, 2, 5, -1]; // 测试用例
|
|
|
|
const vaild = [-1, 0, 4, 2, 1, 8, 7, 5, 5, 2]; // 验证用例
|
|
|
|
/**
|
|
* 使用逐个插入法构造小顶堆
|
|
* @param {number[]} nums 需要处理的完全二叉树,用数组表示(层序遍历)
|
|
* @returns {number[]} 返回一个小顶堆的层序遍历
|
|
*/
|
|
function buildHeap(nums) {
|
|
const heap = [];
|
|
|
|
for (let i = 0; i < nums.length; i++) {
|
|
heap.push(nums[i]);
|
|
let cur = heap.length - 1;
|
|
let parent = Math.floor((cur - 1) / 2);
|
|
|
|
while (cur > 0 && heap[cur] < heap[parent]) {
|
|
[heap[cur], heap[parent]] = [heap[parent], heap[cur]];
|
|
cur = parent;
|
|
parent = Math.floor((cur - 1) / 2);
|
|
}
|
|
}
|
|
|
|
return heap;
|
|
}
|
|
|
|
function test(nums1, nums2) {
|
|
for (let i = 0; i < nums1; i++) {
|
|
if (nums1[i] !== nums2[i]) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
console.log(test(buildeap(numbers), vaild));
|