Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Algorytm zliczający ilość wystąpień każdego z typów w drzewie

Ostatnio zmodyfikowano 2015-11-02 19:49
Autor Wiadomość
TheReclif
Temat założony przez niniejszego użytkownika
[C++] Algorytm zliczający ilość wystąpień każdego z typów w drzewie
» 2015-10-30 14:20:15
Witam!
Potrzebuję algorytmu zliczającego wystąpienia każdej możliwości. Wiem, że jest n elementów tablicy z węzłami oraz że każdy węzeł ma 2 wskaźniki na kolejne węzły(lub NULL, jeżeli od tego węzła nie odchodzi lewy/prawy/oba) i informację o typie obiektu. Myślałem nad stworzeniem rekurencyjnej funkcji wykorzystującej globalne zmienne i tablice. Wiem, że tak można, ale czy możliwe jest zrobienie czegoś takiego w formie pętli i tylko ze zmiennymi lokalnymi?
P-139378
1aam2am1
» 2015-10-30 15:14:42
Jeżeli węzeł ma jeszcze wskaźnik do rodzica to jest to proste.
P-139380
TheReclif
Temat założony przez niniejszego użytkownika
» 2015-10-30 19:44:04
Zakładam, że węzeł jest strukturą (w algorytmach struktury chyba działają szybciej) o takiej definicji:
C/C++
struct Node
{
    Node * lewy;
    Node * prawy;
    Node * rodzic;
   
    int cos;
   
    Node()
    {
        lewy = NULL;
        prawy = NULL;
        rodzic = NULL;
    }
};
Mam więc wskaźnik do rodzica. Jak może wyglądać algorytm zliczający wystąpienia każdej z możliwych wartości składowej cos (zakładam, że jest n możliwych wartości)?
P-139396
notabigthreat
» 2015-10-30 20:39:39
w algorytmach struktury chyba działają szybciej
Szybciej niż co?
P-139398
TheReclif
Temat założony przez niniejszego użytkownika
» 2015-10-30 21:07:15
Działają szybciej niż klasy. Sory za niesprecyzowanie.
P-139400
TheReclif
Temat założony przez niniejszego użytkownika
» 2015-10-30 23:20:53
1aam2am1: Trzeba zliczać od liścia czy od korzenia?
P-139402
notabigthreat
» 2015-10-31 09:09:01
Struktura od klasy różni się tym, że domyślnie składowe są
public
, a nie
private
.

C/C++
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;
}
P-139405
TheReclif
Temat założony przez niniejszego użytkownika
» 2015-10-31 13:29:36
Dziękuję za pomoc. Temat zamykam
P-139420
« 1 » 2
  Strona 1 z 2 Następna strona