I was browsing through the Facebook and encountered ProudEngineers page. The implementation provided there is awesome. After going through it, I couldn't resist to mention on this blog so that our readers like you could also benefit from it. Here is the code:#include <iostream.h> #define TRUE 1 #define FALSE 0 class tree { private: struct node { node *l; int data; node *r; }*p; public: tree(); void search(int n, int &found, node * &parent); void insert(int n); void traverse(); void in(node *q); void pre(node *q); void post(node *q); int operator == (tree t); int compare(node *pp, node *qq); void operator = (tree t); node * copy (node * q); }; tree::tree() { p = NULL; } void tree::search(int n, int &found, node * &parent) { node *q; found = FALSE; parent = NULL; if(p == NULL) return; q = p; while(q != NULL) { if(q->data == n) { found = TRUE; return; } if(q->data > n) { parent = q; q = q->l; } else { parent = q; q = q->r; } } } void tree::insert(int n) { int found; node *t,*parent; search(n, found, parent); if(found == TRUE) cout << endl << "such a node already exists"; else { t = new node; t->data = n; t->l = NULL; t->r = NULL; if(parent == NULL) p = t; else parent->data > n?parent->l = t:parent->r = t; } } void tree::traverse() { int choice; cout << endl << "1. Inorder" << endl << "2. Preorder" << endl << "3. Postorder" << endl << "Your choice "; cin >> choice; switch(choice) { case 1: in(p); break; case 2: pre(p); break; case 3: post(p); break; } } void tree::in(node *q) { if(q != NULL) { in(q->l); cout << "\t" << q->data; in(q->r); } } void tree::pre(node *q) { if(q != NULL) { cout << "\t" << q->data; pre(q->l); pre(q->r); } } void tree::post(node *q) { if(q != NULL) { post(q->l); post(q->r); cout << "\t" << q->data; } } int tree::operator == (tree t) { int flag; flag = compare(p, t.p); return flag; } int tree::compare(node *pp, node *qq) { static int flag; if((pp == NULL) && (qq == NULL)) flag = TRUE; else { if((pp != NULL) && (qq != NULL)) { if(pp->data != qq->data) flag = FALSE; else { compare(pp->l,qq->l); compare(pp->r,qq->r); } } } return (flag); } void tree::operator = (tree t) { p = copy(t.p); } tree::node * tree:: copy(node *q) { node *t; if(q != NULL) { t = new node; t->data = q->data; t->l = copy(q->l); t->r = copy(q->r); return (t); } else return (NULL); } void main() { tree tt, ss; int i, num; for(i=0; i <= 6; i++) { cout << endl << "Enter data for the node to be inserted : "; cin >> num; tt.insert(num); } tt.traverse(); ss = tt; ss.traverse(); if(ss == tt) cout << endl << "Trees are equal"; else cout << endl << "Trees are unequal"; }
↧
Writing Tree data structure in C++
↧