Как сбросить переменную stati c или как создать функцию get_length для двоичного дерева? - PullRequest
0 голосов
/ 09 апреля 2020

Я решил сохранить массив в двоичном дереве, чтобы все элементы массива находились с правой стороны дерева. Как посчитать все эти элементы?

int get_length(Node * array) {
   static int len = 0;
   if (array == NULL) return len;
   else {
       len++;
       get_length(array->right);
   }
}

Проблема в переменной stati c: после каждого использования этой функции переменная len не сбрасывается и возвращаемая длина неверна. После каждого использования эта переменная будет увеличиваться.

Ответы [ 2 ]

5 голосов
/ 09 апреля 2020

Не используйте static. Накопить возвращаемое значение рекурсивного вызова. Например:

int get_length(Node * array) {
   if (array == NULL) return 0;
   else {
       return 1+get_length(array->right);
   }
}
2 голосов
/ 09 апреля 2020

Я предлагаю передать len:

int get_length(Node * array, int len) {
   if (array == NULL) return len;
   else {
       return get_length(array->right, len + 1);
   }
}

Избегайте использования рекурсии, когда есть итеративное решение:

int get_length(Node * array) {
   int len = 0;

   while (array) {
       array = array->right;
       len++;
   }
   return len;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...