TBT Structure:
Program:
/* Q3.WAP to implement TBT with following functions. -create() -preorder() -postorder() -preorder() -inorder() */ #include<iostream> using namespace std; class TBTNode { public: int data; int child,lbit,rbit; TBTNode *left, *right; TBTNode() { data = -1; child = -1; lbit = rbit = 0; left = right = NULL; } TBTNode(int x) { data = x; child = -1; lbit = rbit = 0; left = right = NULL; } }; class TBT { TBTNode *root; public: TBT() { root = new TBTNode(); root->left = root->right = root; } void create(); void create_rec(TBTNode*,int); void preorder(); TBTNode* findPreSuc(TBTNode*); void postorder(); TBTNode* findPostSuc(TBTNode*); void inorder(); TBTNode* findInSuc(TBTNode*); }; void TBT::create() { create_rec(root->left,0); } void TBT::create_rec(TBTNode* father,int cld) { int x; cout<<"\n Enter Data 0 to stop:"; cin>>x; if(x == 0) { return; } TBTNode* t = new TBTNode(x); // left child if(cld == 0) { t->left = father->left; t->child = 0; t->right = father; father->left = t; father->lbit = 1; } else { // right child t->right = father->right; t->child = 1; t->left = father; father->right = t; father->rbit = 1; } cout<<"\n\n Enter left of "<<x<<" :"; create_rec(t,0); cout<<"\n\n Enter right of "<<x<<" :"; create_rec(t,1); } // Preorder traversal void TBT::preorder() { TBTNode *t = root->left; while(t!=root) { cout<<t->data<<" "; t = findPreSuc(t); } } // finding preorder successor TBTNode* TBT::findPreSuc(TBTNode* t) { if( t->lbit == 1) return t->left; if(t->rbit == 1) return t->right; t = t->right; while(t->rbit == 0 && t != root) t = t->right; return t->right; } // postorder void TBT::postorder() { TBTNode *t = root ->left; while( t->lbit == 1 || t->rbit == 1) { if(t->lbit == 1) { t = t->left; } else { t = t->right; } } while( t!= root) { cout<<t->data <<" "; t = findPostSuc(t); } } // find postorder successor TBTNode* TBT::findPostSuc(TBTNode* t) { // right child if( t->child == 1) { while(t->lbit == 1) t = t->left; return t->left; } else { // left child while(t->rbit == 1) t = t->right; t = t->right; // on parent if( t->rbit == 0) return t; t = t->right; while( t->lbit == 1 || t->rbit == 1) { if(t->lbit == 1) { t = t->left; } else { t = t->right; } } return t; } } // Inorder traversal void TBT::inorder() { TBTNode *t = root ->left; while( t->lbit == 1 ) { t = t->left; } while( t!= root) { cout<<t->data <<" "; t = findInSuc(t); } } // Inorder successor TBTNode* TBT::findInSuc(TBTNode* t) { if(t->rbit == 1) { t = t->right; while( t->lbit == 1 ) { t = t->left; } return t; } if(t->rbit == 0) return t->right; } int main() { freopen("input.txt","r",stdin); TBT t; t.create(); cout<<"\n\n Preorder traversal:"; t.preorder(); cout<<"\n\n Postorder traversal:"; t.postorder(); cout<<"\n\n Inorder traversal:"; t.inorder(); return 0; }
Input File:
10 5 3 0 0 7 0 0 15 13 0 0 17 0 0 10
Output:
1 Comments:
Click here for Commentsthanks 😀