// BINARY TREE TRAVERSAL
#include<iostream.h>
#include<conio.h>
struct leaf {
char info;
leaf* left_child;
leaf* right_child;
};
class traversing_BT {
public:
leaf* binary_tree(char*, int, int); //
void output(leaf*, int);
void pre_order(leaf*);
void in_order(leaf*);
void post_order(leaf*);
};
// Function to create a binary tree
leaf* traversing_BT::binary_tree(char* list, int lower, int upper) { //
leaf* node; ///////////
int mid = (lower + upper) / 2;
node = new(leaf);
node->info = list[mid];
if (lower > upper) {
node->left_child = NULL;
node->right_child = NULL;
return(node);
}
if (lower <= mid - 1)
node->left_child = binary_tree(list, lower, mid - 1);
else
node->left_child = NULL;
if (mid + 1 <= upper)
node->right_child = binary_tree(list, mid + 1, upper);
else
node->right_child = NULL;
return(node);
}
// Pre_order traversal
void traversing_BT::pre_order(leaf* node) {
if (node) {
cout << " " << node->info;
pre_order(node->right_child); //
pre_order(node->left_child); //
}
}
// In-order traversal
void traversing_BT::in_order(leaf* node) {
if (node) {
in_order(node->left_child);
cout << "" << node->info;
in_order(node->right_child);
}
}
// Post Order Traversal
void traversing_BT::post_order(leaf* node) {
if (node) {
post_order(node->left_child); //
post_order(node->right_child);// 485VA //
cout << "" << node->info;
}
}
// Main Function
void main() {
clrscr();
traversing_BT binary_c_tree;
char list[100];
int number = 0;
char info;
char choice;
leaf* t = new(leaf);
t = NULL; ////
cout << "\n Input choice 'b' to break:";
choice = getch();
while (choice == 'b') {
cout << "\n Input information of the node:";
cin >> info;
list[number++] = info;
cout << "\n Input choice 'b' to break:";
choice = getch();
}
number--;
cout << "\n Number of elements in the list is " << number + 1;
t = binary_c_tree.binary_tree(list, 0, number);
binary_c_tree.output(t, 1);
cout << "\n Pre-order traversal \n";
binary_c_tree.pre_order(t);
cout << "\n In-order traversal \n";
binary_c_tree.in_order(t);
cout << "\n Post-order traversal \n";
binary_c_tree.post_order(t);
getch();
}
// Output Function
void traversing_BT::output(leaf* t, int level) {
if (t) {
output(t->right_child, level + 1);
cout << "\n";
for (int i = 0; i < level; i++)
cout << "\t";
cout << t->info;
output(t->left_child, level + 1);
}
}