Бинарное дерево поиска | Найти максимальное значение value
Задача: Найти максимальное значение value.
Подскажите пожалуйста,правильно ли я сделал поиск максимального значения?
#include <ctime>
using namespace std;
int tabs = 0;
struct Branch
{
int Data;
Branch* LeftBranch;
Branch* RightBranch;
};
void Add(int aData, Branch*& aBranch)
{
if (!aBranch)
{
aBranch = new Branch;
aBranch->Data = aData;
aBranch->LeftBranch = 0;
aBranch->RightBranch = 0;
return;
}
else if (aBranch->Data > aData)
Add(aData, aBranch->LeftBranch);
else if (aBranch->Data < aData)
Add(aData, aBranch->RightBranch);
}
void FreeTree(Branch* aBranch)
{
if (!aBranch)
return;
FreeTree(aBranch->LeftBranch);
FreeTree(aBranch->RightBranch);
delete aBranch;
return;
}
bool Find(Branch* aBranch, int count)
{
if (!aBranch)
return false;
int data = aBranch->Data;
if (data == count)
return true;
else if (data > count)
return Find(aBranch->LeftBranch, count);
else if (data < count)
return Find(aBranch->RightBranch, count);
return false;
}
int Random(int min, int max)
{
if (max < 2)
return 1;
return min + rand() % (max - min);
}
int maxValue(struct Branch* node)
{
struct Branch* current = node;
while (current->RightBranch != NULL)
current = current->LeftBranch;
return (current->Data);
}
bool FindArray(int* array, int n, int count)
{
for (int i = 0; i < n; i++)
{
if (array[i] == count)
return true;
}
return false;
}
int main()
{
Branch* Root = 0;
setlocale(LC_ALL, "RUS");
std::cout << "Введите K(Максимальное значение 0...K):" << '\n';
int k;
std::cin >> k;
std::cout << "Введите N(Колличество значений):" << '\n';
int n;
std::cin >> n;
std::cout << "Введите Z(Колличество случайных ключей для поиска):" << '\n';
int z;
std::cin >> z;
std::cout << "Подождите..." << '\n';
int* counts = new int[n];
for (int i = 0; i < n; i++)
{
int random = Random(1, k);
counts[i] = random;
Add(random, Root);
}
double startTime = (double)clock();
for (int i = 0; i < z; i++)
{
int random = Random(1, k);
Find(Root, random);
}
double currentClock = (double)clock();
std::cout << "Суммарный поиск по дереву: " << (currentClock - startTime) / 1000 << " сек." <<
'\n';
for (int i = 0; i < z; i++)
{
int random = Random(1, k);
FindArray(counts, n, random);
}
std::cout << "Суммарный поиск по массиву: " << ((double)clock() - currentClock) / 1000 << " сек." << '\n';
cout << "Максимальное значение: " << maxValue(Root);
cin.get();
return 0;
}