hej, ostatnio natknąłem się na bardzo ciekawy algorytm sortowania wykorzystujący drzewo binarne - *a nie kopiec* (nigdy o nim nie słyszałem w kursie Pana Mirosława ani na żadnych stronach) ,mowa tu o inOrder (przynajmniej ja tak to nazwałem :D) . Nie mogłem znaleźć na temat tego algorytmu więcej informacji ,nie wiem czemu bo dla mnie jest bardzo ciekawy (może nawet lepszy od Heap sort którego niezbyt lubię) . By uniknąć problemów podam cały kod sortowania oraz moją implementacje całego drzewa binarnego - co o niej sądzicie co mogę poprawić ? . Z góry dziękuje za odpowiedzi i komentarze oraz pozdrawiam :)
oto kod samego inOrder:
void inOrder(DataTrees *parent) { //sosrtowaanioe
if (parent) {
inOrder(parent->leftChild);
cout << parent->data << " ";
inOrder(parent->rightChild);
}
}
Cały program (napisany w VS więc w pliku stdafx mamy biblioteki):
#include "stdafx.h"
using namespace std;
struct DataTrees {
int data;
DataTrees *leftChild;
DataTrees *rightChild;
};
void add(DataTrees *&parent, int value) { //wstawaianie elementu
if (!parent) { //jezeli jest tu puste mijsce
parent = new DataTrees;
parent->data = value;
parent->leftChild = nullptr;
parent->rightChild = nullptr;
}
else { //pezeszukiwanie
if (value >= parent->data) add(parent->rightChild, value);
else add(parent->leftChild, value);
}
}
void inOrder(DataTrees *parent) { //sosrtowaanioe
if (parent) {
inOrder(parent->leftChild);
cout << parent->data << " ";
inOrder(parent->rightChild);
}
}
void find(DataTrees *parent, DataTrees *&element, int value) { //poszukiwanie danej wartosci i ustawianie wskaznika na odpowiedni obiekt
if (!parent) { //jezeli nie znaleziono i nie ma juzz wiecej elementow
cout << "error" << endl;
}
else if (parent->data == value) { //jezeli znaleziono
element = parent;
cout << "is good! " << endl;
}
else { //poszukiwanie binarne
if (value < parent->data) find(parent->leftChild,element,value);
else find(parent->rightChild, element, value);
}
}
void deleteTree(DataTrees *&element) { //usowanie drzewa
if(element)deleteTree(element->leftChild);
if(element)deleteTree(element->rightChild);
element = nullptr;
}
int main()
{
DataTrees *root = nullptr;
DataTrees *element = nullptr;
while (true) {
cout << "---MENU---" << endl;
cout << "1. add" << endl;
cout << "2. inOrder" << endl;
cout << "3. find" << endl;
cout << "4. show find element" << endl;
cout << "5. delete tree" << endl;
cout << "----------" << endl;
char z = _getch();
switch (z) {
case '1': {
cout << "value: ";
int v; cin >> v;
add(root, v);
break;
}
case '2': {
if (root) {
cout << "sort: ";
if(root) inOrder(root);
else cout << 0;
}
else cout << 0 << endl;
_getch();
break;
}
case '3': {
cout << "value: ";
int v; cin >> v;
find(root, element, v);
_getch();
break;
}
case '4': {
if (element) {
cout << "value: " << element->data << endl;
}
else cout << 0 << endl;
_getch();
break;
}
case '5': {
deleteTree(root);
break;
}
}
system("cls");
}
return 0;
}