Бинарное дерево поиска | Найти максимальное значение 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;
}

Ответы (0 шт):