Edición de la Universidad de Zhejiang "Estructura de datos (segunda edición)" Recopilación de preguntas-Ejercicio 4.3

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.

Supongo que te gusta

Origin blog.csdn.net/u012571715/article/details/113307411
Recomendado
Clasificación