Files
BinarySearchTree/huvud.cpp
2026-03-05 09:47:42 +01:00

185 lines
3.5 KiB
C++
Raw Blame History

#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');
}