#include using namespace std; class komvos { private: int info; komvos *ArDendro; komvos *DeDendro; friend class bstree; public: komvos(int,komvos *,komvos *); ~komvos(void); }; class bstree { private: komvos *riza; public: bstree(void); ~bstree(void); void PutNewKomvos(int); void DiagrafiDendrou(komvos *); void Preorder(komvos *); void Inorder(komvos *); void Postorder(komvos *); void ShowTree(void); }; komvos::komvos(int i, komvos *ap, komvos *dp) { info=i; ArDendro=ap; DeDendro=dp; } komvos::~komvos(void) {} bstree::bstree(void) { riza=0; } bstree::~bstree(void) { DiagrafiDendrou(riza); } void bstree::PutNewKomvos(int i) { komvos *p,*q; bool aristera; p=riza; while(p) { q=p; if(i < p->info) { p=p->ArDendro; aristera=true; } else { p=p->DeDendro; aristera=false; } } p=new komvos(i,0,0); if( !riza ) { riza=p; } else { if(aristera) q->ArDendro=p; else q->DeDendro=p; } } void bstree::DiagrafiDendrou(komvos *p) { if(p) { DiagrafiDendrou(p->ArDendro); DiagrafiDendrou(p->DeDendro); delete p; } } void bstree::Preorder(komvos *p) { if(p) { cout << p->info << ','; Preorder(p->ArDendro); Preorder(p->DeDendro); } } void bstree::Inorder(komvos *p) { if(p) { Inorder(p->ArDendro); cout << p->info << ','; Inorder(p->DeDendro); } } void bstree::Postorder(komvos *p) { if(p) { Postorder(p->ArDendro); Postorder(p->DeDendro); cout << p->info << ','; } } void bstree::ShowTree(void) { Preorder(riza); cout << endl; Inorder(riza); cout << endl; Postorder(riza); cout << endl; } void main(void) { bstree bst; bst.PutNewKomvos(4); bst.PutNewKomvos(1); bst.PutNewKomvos(3); bst.PutNewKomvos(8); bst.PutNewKomvos(7); bst.PutNewKomvos(2); bst.ShowTree(); }