[C++] Algorytm zliczający ilość wystąpień każdego z typów w drzewie
Ostatnio zmodyfikowano 2015-11-02 19:49
TheReclif Temat założony przez niniejszego użytkownika |
» 2015-11-01 21:18:23 Temat otwieram ponownie, ponieważ nie zauważyłem ,że mój problem nie został rozwiązany. A mianowicie czy można zmodyfikować funkcję unsigned IleWDrzewie( int liczony, const Node * korzen ) { if( !korzen ) return 0; unsigned wynik = 0; wynik += IleWDrzewie( liczony, korzen->left ); wynik += IleWDrzewie( liczony, korzen->right ); if( korzen->cos == liczony ) ++wynik; return wynik; }
tak, aby (tak, jak w temacie) zliczyć za jednym razem sumę wystąpień każdego z "cośów"? Nie chcę wywoływać jednej funkcji dla każdego z typów, tylko jeden raz taką ze wskaźnikiem na węzeł i tablicą sum wystąpień typów do wypełnienia przez tą funkcję. |
|
notabigthreat |
» 2015-11-02 18:01:24
vector < pair < int, unsigned >> IleWDrzewieWszystkich( const Node * korzen ) { vector < pair < int, unsigned >> wynik; IleWDrzewieWszystkich2( & wynik, korzen ); return wynik; }
void IleWDrzewieWszystkich2( vector < pair < int, unsigned >>* miejsce_na_wynik, const Node * korzen ) { if( !korzen ) return 0; const int cos_korzenia = korzen->cos; vector < pair < int, unsigned >>::iterator it = find_if( miejsce_na_wynik->begin(), miejsce_na_wynik->end(), [ cos_korzenia ]( const pair < int, unsigned >& p ) { return p.first() == cos_korzenia } ); if( it == miejsce_na_wynik->end() ) miejsce_na_wynik->push_back( { cos_korzenia, 1 } ); else ++( it->second() ); IleWDrzewieWszystkich2( miejsce_na_wynik, korzen->left ); IleWDrzewieWszystkich2( miejsce_na_wynik, korzen->right ); }
|
|
1aam2am1 |
» 2015-11-02 19:49:38 1. Jeżeli prawy różny od NULL obiektzliczen = prawy; licznik++; Idź do punktu 1. 2. Jeżeli lewy różny od NULL obiektzliczen = lewy; licznik++; Idź do punktu 1. 3. Ze spadaniem z hierarchii jest inaczej.Jeżeli spadamy z prawej odnogi sprawdzamy czy lewa jest różna od NULL jak w punkcje nr. 2. Natomiast jeżli spadamy z lewej odnogi powtarzamy całą czynność spadania aż spadniemy do korzeń = NULL lub gdy osiągniemy spadanie z prawej odnogi.
Lepiej nie umiem opisać pożądanego algorytmu.
|
|
1 « 2 » |