2021-06-15 00:49:18 -07:00
---
id: 587d825b367417b2b2512c8b
2021-08-02 23:05:44 +09:00
title: Remover um elemento de um Max Heap
2021-06-15 00:49:18 -07:00
challengeType: 1
forumTopicId: 301710
dashedName: remove-an-element-from-a-max-heap
---
# --description--
2021-08-02 23:05:44 +09:00
Agora que podemos adicionar elementos à nossa heap, vamos ver como podemos remover elementos. Remover e inserir elementos requerem uma lógica similar. Em um max heap, você normalmente vai querer remover o maior valor, então isso envolve simplesmente tirá-lo da raiz da nossa árvore. Isto vai quebrar a propriedade heap de nossa árvore, então temos de restabelecer a propriedade de alguma forma. Normalmente, para um Max Heap, isso é feito da seguinte maneira:
2021-06-15 00:49:18 -07:00
< ol >
2021-08-02 23:05:44 +09:00
< li > Mova o último elemento no heap para a posição raiz.< / li >
< li > Se qualquer filho da raiz for maior do que ela, troque a raiz pelo filho de maior valor.< / li >
< li > Continue trocando até que o pai seja maior que os dois filhos ou até que você atinja o último nível da árvore.< / li >
2021-06-15 00:49:18 -07:00
< / ol >
# --instructions--
2021-08-02 23:05:44 +09:00
Instruções: adicione um método a nosso Max Heap chamado `remove` . Este método deve retornar o maior valor que for adicionado ao nosso Max Heap e removê-lo da heap. Ele também deve reordenar o heap para que a propriedade heap seja mantida. Depois de remover um elemento, o próximo elemento de maior valor do restante do heap deve se tornar a raiz.
2021-06-15 00:49:18 -07:00
# --hints--
2021-08-02 23:05:44 +09:00
A estrutura de dados MaxHeap deve existir.
2021-06-15 00:49:18 -07:00
```js
assert(
(function () {
var test = false;
if (typeof MaxHeap !== 'undefined') {
test = new MaxHeap();
}
return typeof test == 'object';
})()
);
```
2021-08-02 23:05:44 +09:00
MaxHeap deve ter um método chamado print.
2021-06-15 00:49:18 -07:00
```js
assert(
(function () {
var test = false;
if (typeof MaxHeap !== 'undefined') {
test = new MaxHeap();
} else {
return false;
}
return typeof test.print == 'function';
})()
);
```
2021-08-02 23:05:44 +09:00
MaxHeap deve ter um método chamado insert.
2021-06-15 00:49:18 -07:00
```js
assert(
(function () {
var test = false;
if (typeof MaxHeap !== 'undefined') {
test = new MaxHeap();
} else {
return false;
}
return typeof test.insert == 'function';
})()
);
```
2021-08-02 23:05:44 +09:00
MinHeap deve ter um método chamado remove.
2021-06-15 00:49:18 -07:00
```js
assert(
(function () {
var test = false;
if (typeof MaxHeap !== 'undefined') {
test = new MaxHeap();
} else {
return false;
}
return typeof test.remove == 'function';
})()
);
```
2021-08-02 23:05:44 +09:00
O método remove deve remover o maior elemento do Max Heap ao mesmo tempo em que mantém a propriedade do Max Heap.
2021-06-15 00:49:18 -07:00
```js
assert(
(function () {
var test = false;
if (typeof MaxHeap !== 'undefined') {
test = new MaxHeap();
} else {
return false;
}
test.insert(30);
test.insert(300);
test.insert(500);
test.insert(10);
let result = [];
result.push(test.remove());
result.push(test.remove());
result.push(test.remove());
result.push(test.remove());
return result.join('') == '5003003010';
})()
);
```
# --seed--
## --seed-contents--
```js
var MaxHeap = function() {
this.heap = [null];
this.insert = (ele) => {
var index = this.heap.length;
var arr = [...this.heap];
arr.push(ele);
while (ele > arr[Math.floor(index / 2)] & & index > 1) {
arr[index] = arr[Math.floor(index / 2)];
arr[Math.floor(index / 2)] = ele;
index = arr[Math.floor(index / 2)];
}
this.heap = arr;
}
this.print = () => {
return this.heap.slice(1);
}
// Only change code below this line
// Only change code above this line
};
```
# --solutions--
```js
// solution required
```