Guía avanzada de competencia algorítmica --- 0x18 (Representación mínima de árbol) Tree Metro System

Tema

Inserte la descripción de la imagen aquí

responder

1. El significado de la pregunta es preguntar si el árbol correspondiente a una cadena dada es isomorfo, hablemos primero del concepto

Inserte la descripción de la imagen aquí
2. Para el recorrido del árbol, comenzando desde el nodo raíz, 0 representa el recorrido hacia abajo y 1 representa el retroceso hacia arriba. Cuando atravesamos el árbol, obtendremos el orden dfs. También podemos dibujar el árbol de acuerdo con el orden dfs. Dos árboles con el mismo orden topológico, simplemente podemos ser vistos como un árbol isomorfo

3. Cómo juzgar si dos árboles son isomorfos : encuentre la representación más pequeña de cada árbol. Es decir, el orden dfs más pequeño que es isomorfo a este árbol. Si dos árboles son isomorfos, entonces la representación mínima de los dos árboles debería ser la misma.Encontrar la representación mínima del árbol se puede implementar de forma recursiva, encontrar el orden dfs de todos los subárboles y luego ordenarlos juntos de pequeño a grande

Código

#include<bits/stdc++.h>

using namespace std;

string dfs(string &seq, int &u) {
    
    
    vector<string> seqs;
    u++;  //跳过边界
    //只有是0才会向下,才有子树
    while (seq[u] == '0') {
    
    
    	//把子树的dfs序放入
        seqs.push_back(dfs(seq, u));
    }
    u++;//向上回溯
    //给子树dfs序排列
    sort(seqs.begin(), seqs.end());
    string res = "0";
    for (auto x:seqs) {
    
    
        res += x;
    }
    res += '1';
    return res;
}

int main() {
    
    

    int t;
    cin >> t;
    while (t--) {
    
    
        string a, b;
        cin >> a >> b;
        //在根节点上再拼接一个节点处理边界
        a = '0' + a + '1';
        b = '0' + b + '1';
        int ua = 0, ub = 0;
        auto sa = dfs(a, ua), sb = dfs(b, ub);
        if (sa == sb) cout << "same" << endl;
        else cout << "different" << endl;
    }

    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_44791484/article/details/114043690
Recomendado
Clasificación