Drzewa binarne - Obiektowo

0

Chcialem zaptac czy ktos moglby podac jak wyglada deklaracja drzewa binarnego ale za pomoca klas, bo niestety obiektowo nie umiem tego sam zrobic. I ewentualnie jak wyglada zapis do drzewa i wyswietlanie.

0

Dwa albo trzy (zalezy czy parent ci do czegos potrzebny) wskazniki i wartosc :P

0

hm.. mam nadzieje ze autor watku nie probuje sie podszywac..

0

LOL nie nie podszywam sie. Jednak ponawiam pytanie czy ktos mi powie jak zrobic to obiektowo? ;p

0

Drzewo binarne to takie co z jednego rodzica wychodzi 2 dzieci. Czyli robisz np. klase węzła, zawiera 2 wskaźniki, dwa po jednym na dziecko. Tworzysz tak sobie jedną klase, dodajesz do niej odpowiednie metody ułatwiające dostęp.

0

mam dzis dobry humor..

struct Node
{
    Node* left;
    Node* right;
    unsigned long value;
    Node(int value_):left(0),right(0),value(value_){}
    void walkDepthFirst(void (*atNode)(Node*))
    {    if(!ptr)return;
          atNode(this);
          walkDepthFirst(left);
          walkDepthFirst(right);
    }
};

struct Tree
{
    Node* root;
    Tree():root(0){}
    void insert(Node* what)
    {
         if(!what)return;
         if(!root){root = what; return;}
         Node* tmp_prev, tmp = root;
         do
            if(what->value > tmp->value)
            {    tmp_prev = tmp;
                  tmp = tmp->right;
            }
            else if(what->value < tmp->value)
            {    tmp_prev = tmp;
                  tmp = tmp->left;
            }
            else
                 tmp_prev = tmp = 0;
         while(tmp);
         if(tmp_prev)
            if(what->value > tmp->value)
                tmp_prev->right = what;
            else
                tmp_prev->left = what;
     }
     void walkDepthFirst(void (*atNode)(Node*))
     {    root->walkDepthFirst(atNode);
     }
};

void printNode(Node* ptr)
{
    cout << ptr->value << endl;
}

int main()
{
    Tree tree;
    tree.insert(new Node(5));
    tree.insert(new Node(3));
    tree.insert(new Node(1));
    tree.insert(new Node(9));
    tree.walkDepthFirst(&printNode);
}

disclaimer: pisane na biegu, z palca. nie kompilowane. nie sprawdzane. nie testowane. moze zawierac literowki, bledy, babole, robale, trojany a takze sladowe ilosci orzechow wloskich. czytac na wlasna odpowiedzialnosc

..ah.. i wielu rzeczy juz mi sie nie chcialo, np. destruktorow :evil:

1 użytkowników online, w tym zalogowanych: 0, gości: 1