Durchlaufen des Heap-PAT-Klasse-A-1155-Heap-Pfads

Link zum Originaltitel

In der Informatik ist ein Heap eine spezielle baumbasierte Datenstruktur mit Heap-Eigenschaften:

Wenn P der übergeordnete Knoten von C ist, ist das Gewicht des Knotens P im Big-Top-Heap größer oder gleich dem Gewicht des Knotens C, und das Gewicht des Knotens P im Small-Top-Heap ist kleiner oder gleich dem Gewicht des Knoten-C-Werts.

Eine übliche Implementierung eines Heaps ist ein binärer Heap, der durch einen vollständigen Binärbaum implementiert wird.

Natürlich muss bei Big-Top-/Small-Top-Heaps jeder Pfad von der Wurzel zum Blatt in nicht aufsteigender/nicht absteigender Reihenfolge erfolgen.

Ihre Aufgabe besteht darin, jeden Pfad in einem bestimmten vollständigen Binärbaum zu untersuchen, um festzustellen, ob es sich um einen Heap handelt.

Eingabeformat
Die erste Zeile enthält die Ganzzahl N, die die Anzahl der Knoten im Baum darstellt.

Die zweite Zeile enthält N verschiedene ganze Zahlen, die die Folge von Durchläufen in Ebenenordnung für einen gegebenen vollständigen Binärbaum darstellen.

Ausgabeformat
Geben Sie für einen bestimmten Baum zunächst alle Pfade von der Wurzel bis zu den Blättern aus.

Jeder Pfad belegt eine Zeile und die Zahlen werden durch Leerzeichen getrennt. Am Anfang und Ende der Zeile dürfen keine zusätzlichen Leerzeichen stehen.

Die Pfade müssen in der folgenden Reihenfolge ausgegeben werden: Für jeden Knoten im Baum muss gelten, dass Pfade in seinem rechten Teilbaum vor Pfaden in seinem linken Teilbaum ausgegeben werden.

Wenn es sich in der letzten Zeile um einen großen oberen Heap handelt, wird „Max Heap“ ausgegeben. Wenn es sich um einen kleinen oberen Heap handelt, wird „Min Heap“ ausgegeben. Wenn es sich nicht um einen Heap handelt, wird „Not Heap“ ausgegeben.

Datenbereich
1<N≤1000
Eingabebeispiel 1:
8
98 72 86 60 65 12 23 50
Ausgabebeispiel 1:
98 86 23
98 86 12
98 72 65
98 72 60 50
Max. Heap-
Eingabebeispiel 2:
8
8 38 25 58 52 82 70 60
Ausgabebeispiel 2:
8 25 70
8 25
82
8 38 52 8 38 58 60
Min Heap
Eingabebeispiel 3:
8
10 28 15 12 34 9 8 56
Ausgabebeispiel 3:
10 15 8
10 15
9 10 28 34
10 28 12 56
Nicht Haufen

Meine Lösung:

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;

int n;
int a[N];
bool lt, gt;

vector <int> path;
void dfs(int u){
    path.push_back(a[u]);
    if(2 * u > n){
        cout << path[0];
        for(int i = 1; i < path.size(); i ++ ) {
            cout << ' ' << path[i];
            if(path[i] < path[i - 1]) gt = true;
            else if(path[i] > path[i - 1]) lt = true;
        }
        cout << endl;
    }
    if(2 * u + 1 <= n) dfs(2 * u + 1);
    if(2 * u <= n) dfs(2 * u);
    path.pop_back();
}

int main(){
    cin >> n;
    for(int i = 1; i <= n; i ++ ){
        cin >> a[i];
    }
    
    dfs(1);
    
    if(lt && gt) puts("Not Heap");
    else if(lt) puts("Min Heap");
    else puts("Max Heap");
    return 0;
}

Acho que você gosta

Origin blog.csdn.net/weixin_45660485/article/details/126083054
Recomendado
Clasificación