Program:
#include<iostream> #include<string.h> #define MAX 100 using namespace std; class Node { public: int data; Node* left,*right; Node() { data=0; left=right=NULL; } Node(int x) { data=x; left=right=NULL; } }; class StackNode { public: Node* addr; int flag; }; class Stack { StackNode data[MAX]; int top; public: Stack() { top = -1; } int isEmpty() { if(top == -1) return 1; return 0; } int isFull() { if(top == MAX -1) return 1; return 0; } void push(StackNode x) { if( !isFull() ) { top++; data[top] = x; } else { cout<<"\n\n Stack is Full"; } } StackNode pop() { return data[top--]; } }; class BSTree { Node *root; public: BSTree() { root = NULL; } void create(); void insert(int); void postorder(); Node* findmin(); }; void BSTree::create() { int x; while(1) { cout<<"\n Enter number to be inserted and 0 to stop:"; cin>> x; if(x == 0) { break; } insert(x); } } void BSTree::insert(int x) { if(root == NULL) { root = new Node(x); return; } Node*t = root; Node *p; while(t != NULL) { p = t; if(x < t->data) { t = t->left; } else if(x > t->data) { t = t->right; } else { cout<<"\n Duplicate Data"; return; } } t = new Node(x); if(x > p->data) { p->right =t; } else { p->left = t; } } Node* BSTree::findmin() { if(root == NULL) return NULL; Node *t = root; while(t->left != NULL) { t = t->left; } return t; } void BSTree::postorder() { if(root == NULL) { cout<<"\n\n Tree is Empty"; return; } Node *t = root; Stack s; StackNode st; while(t != NULL) { st.addr = t; st.flag = 0; s.push(st); t = t->left; } while(!s.isEmpty()) { st = s.pop(); t = st.addr; if( st.flag == 1 ) { cout<<t->data<<" "; continue; } st.flag = 1; s.push(st); t = t->right; while(t != NULL) { st.addr = t; st.flag = 0; s.push(st); t = t->left; } } } int main() { freopen("input.txt","r",stdin); BSTree t; t.create(); cout<<"\n\n Displaying Data:"; t.postorder(); Node *p = t.findmin(); cout<<"\n Minimum Value:"<<p->data; return 0; }
Input File:
50 45 25 48 60 55 70 0
Output: