Program:
/* Q1.WAP to create a simple binary tree and implement following functions. -create() (using 0 as a terminating value) -create() (using STOP as a terminating condition) -show() -3 recursive() -3 nonrecursive -search() -count() */ #include<iostream> #include<string.h> #include<stdlib.h> #define MAX 100 using namespace std; class Node { public: int data; Node* left; Node* right; Node() { data=0; left=right=NULL; } Node(int x) { data = x; left=right=NULL; } }; class Tree { Node* root; public: // Constructor Tree() { root=NULL; } Node* getRoot() { return root; } Node* create_stop(); void create() { root = create_stop(); } // Recursive Call Def void preorder(Node*); void inorder(Node*); void postorder(Node*); int search(Node*,int); int count(Node*); }; // Create 0 Node* Tree::create_stop() { char x[100]; cout<<"\nEnter Data:"; cin.getline(x,100); if(strcmp(x,"STOP") == 0) return NULL; Node *p; p = new Node(atoi(x)); cout<<"\n Enter"<<x<<" of Left:"; p->left = create_stop(); cout<<"\n Enter "<<x<<" of Right:"; p->right = create_stop(); return p; } // Recursive Traversal void Tree::preorder(Node* p) { if(p==NULL) return; cout<<p->data<<" "; preorder(p->left); preorder(p->right); } void Tree::inorder(Node* p) { if(p==NULL) return; inorder(p->left); cout<<p->data<<" "; inorder(p->right); } void Tree::postorder(Node* p) { if(p==NULL) return; postorder(p->left); postorder(p->right); cout<<p->data<<" "; } // Count Function int Tree::count(Node* t) { int res1=0,res2=0; if( t == NULL ) return 0; res1=count(t->left); res1++; res2=count(t->right); return res1+res2; } // Search Function int Tree::search(Node* p,int s) { if(p == NULL) { return 0; } if(p->data == s) { return 1; } int res; res = search(p->left,s); if(res == 1) { return res; } res = search(p->right,s); return res; } int main() { freopen("inputstr.txt","r",stdin); Tree t; t.create(); cout<<"\n-------------------------------"; cout<<"\n\n Recursive Traversal "; cout<<"\n\n Preorder Traversal:"; t.preorder(t.getRoot()); cout<<"\n\n Inorder Traversal:"; t.inorder(t.getRoot()); cout<<"\n\n Postorder Traversal:"; t.postorder(t.getRoot()); int i=5,s; while( i != 0) { cout<<"\n\n Enter Search Key:"; cin>>s; if(t.search(t.getRoot(),s)) cout<<"\n Data "<<s<<" Found!"; else cout<<"\n Data "<<s<<" Not Found!"; i--; } cout<<"\n\n Count:"<<t.count(t.getRoot()); return 0; }
Input File:
10 5 3 STOP STOP 7 STOP STOP 15 13 STOP STOP 17 STOP STOP 7 2 13 17 0
Output: