В вашем коде есть пара проблем. Но давайте прямо к больно.
В чем главная проблема?
Из вашего кода очевидно, что tree1Ptr
является указателем. В принципе, он должен указывать на узел дерева, который имеет два указателя, один на левый узел и один на правый узел.
Итак, где-то в вашем коде вы должны иметь:
tree1Ptr = new Node; // or whatever the type of your node is called
Однако в вашем внутреннем цикле вы просто используете его, как если бы это был массив:
for (int i = 0; i < 10000; i++)
{
int random = rand() % 20000;
tree1Ptr->add(random);
for (int j = 0; j < i; j++) {
if (tree1Ptr[j]==random) //<============ OUCH !!
i--;
}
}
Компилятор не будет жаловаться, потому что это правильный синтаксис: вы можете использовать индексирование массива по указателю. Но вам нужно убедиться, что вы не выходите за пределы (так что здесь, j остается <1). </p>
Другие замечания
Кстати, во внутреннем цикле вы просто хотите сказать, что вы должны повторить попытку, если найден номер. Вы можете break
внутренний цикл, если номер уже найден, чтобы не продолжать.
Вы также должны заполнить свой генератор случайных чисел, чтобы избежать запуска программы всегда с одинаковой последовательностью.
Как это решить?
Вы действительно должны углубить свое понимание BST. Навигация по узлу требует сравнения со значением в текущем узле и, в зависимости от результата, повторяется, продолжая либо с указателем влево или вправо, не используя индексацию. Но это было бы слишком долго, чтобы объяснить здесь. Поэтому, возможно, вам стоит поискать учебник, например этот