
Uložení struktury binárního stromu
Dobrý den, mám problém a nevím si už rady.
Jedná se o to, že potřebuju uložit strukturu binárního stromu pomocí EBS. (nějak takto bRoKD5 - omlouvám se za kvalitu mojí kresby )
Jak vypadá uzel (zjednodušeně):
struct uzel {
const int hodnota;
std::unique_ptr<uzel> m_leva = nullptr, m_prava = nullptr;
uzel(const int& Hodnota) : hodnota(Hodnota) {}
};
Zatím to řeším tak, že mám rekurzivní funkci, která do vektoru přidává jednotlivé bajty (pak se převedou nakonec na jednotlivé bity).
void export_ebs(std::unique_ptr<uzel>& podstrom, std::vector<std::uint8_t>& bajty) {
if (podstrom == nullptr) bajty.emplace(0);
export_ebs(podstrom->m_leva, bajty);
bajty.emplace(1);
export_ebs(podstrom->m_prava, bajty);
}
Bohužel tenhle způsob vynechá neexistující uzly, které jsou hlouběji jak jedna urověn.
Podmínka je, že musí využívat jen existující uzly, a není možné vytvářet uzly prázdné.
Děkuji za jakýkoli nápad.
co???
Ten rekurzivny sposob je normalny a spravny prechod stromom, nechapem co to je "neexistujuci uzol".
Ano, to je, ale bude to fungovat jen s uzly, které budou existovat, a na jejich potomky s hloubkou (RODIC + 1). Ale já potřebuju zachovat kompletně celou strukturu (takže i CELÉ větve stromu, které neexistují, musí být ve výsledku vyjádřené nulami).
Zatím mě napadlo, si dopředu vytvořit vektor o určité velikosti (maximální počet uzlů pro určitou hloubku stromu). Tj.: pro strom s hloubkou 1, bude velikost 1, pro 2 bude 1 + 2 a pro 3 zase 1 + 2 + 4. Pak to můžu pomocí std::fill() zaplnit nulama; ale pořád nevím jak potom zapsat ty jedničky pro existující uzly.
Tohle jsem sice použít nemohl, ale navedlo mě to na správnou cestu a už mi všechno funguje. Díky za radu.