Ejercicio 4.3 Ruta en el montón (25 punto (s))
Inserte una serie de números dados en una pequeña pila superior que inicialmente está vacía H[]
. Luego, para cualquier subíndice dado i
, imprima H[i]
la ruta desde el nodo raíz.
Ejemplo:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int N, M;
cin >> N >> M;
vector<int> H;
H.reserve(N+1);
for(int i = 1; i <= N; i++) {
cin >> H[i];
int parent = i / 2;
int cur = i;
while(parent) {
if(H[cur] < H[parent]) {
swap(H[cur], H[parent]);
cur = parent;
parent = cur / 2;
continue;
}
break;
}
}
while (M--) {
int i;
cin >> i;
while(i) {
cout << H[i];
if(i == 1) cout << endl;
else cout << ' ';
i >>= 1;
}
}
return 0;
}
Ideas:
Inserte un nuevo elemento al final de la pequeña pila superior. Si es más pequeño que el nodo principal, cámbielo hasta que no se pueda cambiar.