Sei sulla pagina 1di 4

#include "stdafx.

h"
#include <iostream>
#include<iomanip>
#include <string>
using namespace std;
const int maxSize=30;
class treenode // a record holding all the data and pointer for ea
ch item
{
public:
char data[20]; // the data field
char deldata; // indicates if data has been deleted
int left; // the left pointer field
int right; // the right pointer field
};

void list(treenode tree[maxSize], int root, int free);


void inorder(treenode tree[maxSize], int root);
void preorder(treenode tree[maxSize], int root);
void postorder(treenode tree[maxSize], int root);
void findnode(treenode tree[maxSize], int root);
void addnode(treenode tree[maxSize], int &root, int &free);
void delnode(treenode tree[maxSize], int root, int &free);
void initialise(treenode tree[maxSize], int &root, int &free);

void list(treenode tree[maxSize], int root, int free)


{
int i;
cout<<"Free :"<<free<<endl;
cout<<"Root :"<<root<<endl;
for (i=0;i<10;i++)
{
cout<<setw(3)<<i<<setw(5)<<tree[i].left;
cout<<setw(10)<<tree[i].data;
cout<<setw(5)<<tree[i].right<<endl;
}
}

void initialise(treenode tree[maxSize], int &root, int &free)


{
int i;
for (i=0;i<30;i++)
{
strcpy(tree[i].data," ");
tree[i].deldata=' ';
tree[i].left=i+1;
tree[i].right=-1;
}
free=0;
root=-1;
tree[29].left=-1;
}

void inorder(treenode tree[maxSize], int root)


{
int current;
current=root;
if (tree[current].left!=-1)
{
inorder(tree,tree[current].left);
}
cout<<tree[current].data<<endl;
if (tree[current].right!=-1)
{
inorder(tree,tree[current].right);
}
}

void preorder(treenode tree[maxSize], int root)


{
int current;
current=root;
cout<<tree[current].data<<endl;
if (tree[current].left!=-1)
{
preorder(tree,tree[current].left);
}
if (tree[current].right!=-1)
{
preorder(tree,tree[current].right);
}
}

void postorder(treenode tree[maxSize], int root)


{
int current;
current=root;
if (tree[current].left!=-1)
{
postorder(tree,tree[current].left);
}
if (tree[current].right!=-1)
{
postorder(tree,tree[current].right);
}
cout<<tree[current].data<<endl;
}

void findnode(treenode tree[maxSize], int root)


{
treenode search;
int current;
if (root==-1)
cout<<"Error - no items in tree to search"<<endl;
else
{
cout<<"Enter search string :";
gets(search.data);
current=root;
while(0!=strcmp(search.data,tree[current].data)&& current!=-1)
{
if (0>=strcmp(search.data,tree[current].data))
current=tree[current].left;
else
current=tree[current].right;
}
if (current==-1)
cout<<"Error item not found in tree"<<endl;
else
cout<<search.data<<" was found at element no "<<
current<<endl;
}
}

void addnode(treenode tree[maxSize], int &root, int &free)


{
int newptr, current, past;
if (free==-1)
cout<<"Error - no room left in tree to add items"<<endl;
else
{
newptr=free;
free=tree[free].left;
cout<<"Enter new data item :";
gets(tree[newptr].data);
tree[newptr].left=-1;
if (root==-1)
root=newptr;
else
{
current=root;
while (current!=-1)
{
past=current;
if (0>=strcmp(tree[newptr].data,tree[current].d
ata))
current=tree[current].left;
else current=tree[current].right;
}
if (0>=strcmp(tree[newptr].data,tree[past].data))
{
tree[past].left=newptr;
cout<<"going left"<<endl;
}
else
{tree[past].right=newptr;
cout<<"going right"<<endl;
}
}
}
}

void delnode(treenode tree[maxSize], int root, int &free)


{
}

void main()
{
char option;
int root=-1, free=0; //the start of the list
treenode tree[maxSize];//an array of records holding all the list elements inf
o
initialise(tree, root, free);
do
{
list(tree,root,free);
cout<<endl<<endl<<endl;
cout<<"Menu"<<endl<<endl;
cout<<"1. In-order tree traversal"<<endl;
cout<<"2. Pre-order tree traversal"<<endl;
cout<<"3. Post-order tree traversal"<<endl;
cout<<"4. Find an item"<<endl;
cout<<"5. Insert an item"<<endl;
cout<<"6. Delete an item"<<endl;
cout<<"7. Quit system"<<endl<<endl;
cout<<"Please enter option choice :";
cin>>option;
switch (option)
{
case '1': inorder(tree, root);
break;
case '2': preorder(tree, root);
break;
case '3': postorder(tree, root);
break;
case '4': findnode(tree, root);
break;
case '5': addnode(tree,root,free);
break;
case '6': delnode(tree,root,free);
break;
case '7':cout<<"Quitting system"<<endl;
break;
default: cout<<"you have entered an incorrect option choice plea
se try again"<<endl<<endl;
}
}
while (option!='7');
}

Potrebbero piacerti anche