Не уверен, что это покрывает все ваши проблемы, но это ошибка, которая приводит к сбою кода.
Здесь:
int n1, n2; <<<<<<<< NOTICE
BstNode* getNewNode(int element)
вы делаете глобальные переменные n1
и n2
, которые вы хотите использовать в некоторых функциях, таких как printCommon
Но здесь:
int main()
{
BstNode* root1 = NULL;
BstNode* root2 = NULL;
int n1, n2, ele; <<<<<<<<<<<<< NOTICE
cin >> n1;
вы создаете локальные переменные с тем же именем и принимаете входные данные в локальные переменные.
Поэтому, когда вызывается функция printcommon
, она не использует входные значения, а использует глобальные переменные, которые имеют нулевое значение.
Это можно увидеть, выполнив cout << "n1 is " << n1 << endl;
внутри функции и внутри main
(сразу после чтения ввода).
РЕДАКТИРОВАТЬ
Вышесказанное не решило все проблемы.Другая проблема - это функция create_array
, где индекс (он же k
) неверен, то есть он не записывает в 0, 1, 2, 3, 4, ..., но возвращает ноль, перезаписывая предыдущие элементы.
Чтобы решить эту проблему, используйте указатель для индекса.Что-то вроде:
void create_Array(BstNode * root, int arr[], int * k)
{
if (root == NULL) return;
create_Array(root->left, arr, k);
arr[*k] = root->data;
(*k)++;
create_Array(root->right, arr, k);
}
и назовите это как
create_Array(root1, arr1, &i);
^ notice