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.
Dwa albo trzy (zalezy czy parent ci do czegos potrzebny) wskazniki i wartosc :P
hm.. mam nadzieje ze autor watku nie probuje sie podszywac..
LOL nie nie podszywam sie. Jednak ponawiam pytanie czy ktos mi powie jak zrobic to obiektowo? ;p
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.
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: