185 lines
3.5 KiB
C++
185 lines
3.5 KiB
C++
#include <iostream> //f<>r in och utmatning
|
||
#include <cstring>
|
||
#include "defs.h"
|
||
#include "tree.h"
|
||
|
||
using namespace std;
|
||
int mataIn()
|
||
{
|
||
char buffer[BUFFERSIZE];
|
||
int f;
|
||
do
|
||
{
|
||
cin >> buffer;
|
||
if (strcmp(buffer, "0") == 0)
|
||
return 0;
|
||
else
|
||
{
|
||
f = atoi(buffer);
|
||
if (f != 0)
|
||
return f;
|
||
else
|
||
cout << " Inget tal, f<>rsok igen: ";
|
||
}
|
||
} while (!f);
|
||
return 0;
|
||
}
|
||
void _insert(treeClass &myTree)
|
||
{
|
||
dataType item;
|
||
cout << " Vad vill du s<>tta in i tr<74>det: ";
|
||
item = mataIn();
|
||
myTree.insert(myTree.root, item);
|
||
}
|
||
void _del(treeClass &myTree)
|
||
{
|
||
if (!myTree.isEmpty())
|
||
{
|
||
dataType item;
|
||
cout << " Vad vill du ta bort : ";
|
||
item = mataIn();
|
||
if (myTree.seek(myTree.root, item) != NULL)
|
||
{
|
||
myTree.del(myTree.root, item);
|
||
return;
|
||
}
|
||
else
|
||
cout << " Noden " << item << " finns inte. ";
|
||
}
|
||
else
|
||
cout << " Du har inte gjort n<>got tr<74>d <20>nnu... ";
|
||
}
|
||
void _preOrder(treeClass myTree)
|
||
{
|
||
if (!myTree.isEmpty())
|
||
myTree.preOrder(myTree.root);
|
||
else
|
||
cout << " Du har inte gjort n<>got tr<74>d <20>nnu... ";
|
||
}
|
||
void _inOrder(treeClass myTree)
|
||
{
|
||
if (!myTree.isEmpty())
|
||
myTree.inOrder(myTree.root);
|
||
else
|
||
cout << " Du har inte gjort n<>got tr<74>d <20>nnu... ";
|
||
}
|
||
void _postOrder(treeClass myTree)
|
||
{
|
||
if (!myTree.isEmpty())
|
||
myTree.postOrder(myTree.root);
|
||
else
|
||
cout << " Du har inte gjort n<>got tr<74>d <20>nnu... ";
|
||
}
|
||
void _seek(treeClass myTree)
|
||
{
|
||
if (!myTree.isEmpty())
|
||
{
|
||
dataType item;
|
||
cout << " Mata in s<>kta v<>rdet: ";
|
||
item = mataIn();
|
||
if (myTree.seek(myTree.root, item) != NULL)
|
||
cout << " Ja, noden " << item << " fanns med...";
|
||
else
|
||
cout << " Nej, noden " << item << " fanns inte med...";
|
||
}
|
||
else
|
||
cout << " Du har inte gjort n<>got tr<74>d <20>nnu... ";
|
||
}
|
||
void _save(treeClass myTree)
|
||
{
|
||
if (!myTree.isEmpty())
|
||
{
|
||
fstream fil;
|
||
char filnamn[NAMESIZE];
|
||
cout << " Ange filnamn att spara: ";
|
||
cin >> filnamn;
|
||
fil.open(filnamn, ios::out | ios::binary);
|
||
myTree.save(myTree.root, fil);
|
||
fil.close();
|
||
}
|
||
else
|
||
cout << " Du har inte gjort n<>got tr<74>d <20>nnu...";
|
||
}
|
||
void _load(treeClass &myTree)
|
||
{
|
||
if (myTree.isEmpty())
|
||
{
|
||
fstream fil;
|
||
dataType item;
|
||
char filnamn[NAMESIZE];
|
||
cout << " Ange filnamn att h<>mta: ";
|
||
cin >> filnamn;
|
||
fil.open(filnamn, ios::in | ios::binary);
|
||
if (fil)
|
||
while (fil.peek() != EOF)
|
||
{
|
||
fil.read((char *)&item, sizeof(item));
|
||
myTree.insert(myTree.root, item);
|
||
}
|
||
else
|
||
cout << " Filen finns inte...";
|
||
fil.close();
|
||
}
|
||
else
|
||
cout << " Det finns redan v<>rden i tr<74>det. \n"
|
||
<< " Du m<>ste ta bort samtliga noder \n"
|
||
<< " eller starta om programmet f<>re \n"
|
||
<< " du kan h<>mta ett tr<74>d fr<66>n fil \n";
|
||
}
|
||
void meny()
|
||
{
|
||
cout << " \n BIN<49>RT S<>K TR<54>D "
|
||
<< " \n --------------- "
|
||
<< " \n 1. L<>gg till nod "
|
||
<< " \n 2. Ta bort nod "
|
||
<< " \n 3. S<>k efter nod "
|
||
<< " \n 4. Skriv ut i preorder "
|
||
<< " \n 5. Skriv ut i inorder "
|
||
<< " \n 6. Skriv ut i postorder "
|
||
<< " \n 7. Spara tr<74>det p<> fil "
|
||
<< " \n 8. H<>mta tr<74>d fr<66>n fil "
|
||
<< " \n 0. Avsluta \n ";
|
||
}
|
||
int main()
|
||
{
|
||
treeClass myTree;
|
||
char val = TRUE;
|
||
do
|
||
{
|
||
meny();
|
||
cin >> val;
|
||
switch (val)
|
||
{
|
||
case '1':
|
||
_insert(myTree);
|
||
break;
|
||
case '2':
|
||
_del(myTree);
|
||
break;
|
||
case '3':
|
||
_seek(myTree);
|
||
break;
|
||
case '4':
|
||
_preOrder(myTree);
|
||
break;
|
||
case '5':
|
||
_inOrder(myTree);
|
||
break;
|
||
case '6':
|
||
_postOrder(myTree);
|
||
break;
|
||
case '7':
|
||
_save(myTree);
|
||
break;
|
||
case '8':
|
||
_load(myTree);
|
||
break;
|
||
case '0':
|
||
cout << " Programmet avslutat";
|
||
break;
|
||
default:
|
||
cout << " Felaktigt val";
|
||
}
|
||
} while (val != '0');
|
||
}
|