Увеличение числа в рекурсивных функциях - PullRequest
0 голосов
/ 17 октября 2011

для программирования я должен загрузить дерево в массив по порядку.

Сам по себе рекурсивный алгоритм для меня не проблема.Проблема, с которой я сталкиваюсь, состоит в том, чтобы периодически увеличивать номера индексов / элементов, чтобы данные переходили в правильный элемент массива, а не перезаписывали друг друга после возврата вызовов.

void foo( currentNode, data[], element? )
{
    // base case
    if ( currentNode == NULL )

    foo( currentNode->left, data, element? );
    data[ element++ ] = currentNode->data; // what do I do in between the left and right subtree calls?
    foo( currentNode->right, data, element? );
}

Итак, как мне увеличитьэлемент, так что он увеличивается только до следующей точки массива для обхода inorder?

Подсказки хороши, но я не возражаю против решений.

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Сделайте ваш параметр данных ссылкой на указатель:

void foo(Node* currentNode, ContentType*& data) {
  //...
  *data++ = currentNode->data;
  //..
}
0 голосов
/ 17 октября 2011

если я правильно вас понял, все, что вам нужно, это указатель

void foo( currentNode, data[], int &element )

foo( currentNode->left, data, element );
data[ element++ ] = currentNode->data;

с этим вы можете изменять значение элемента (точнее, значение, на которое указывает элемент) при каждом вызове foo

...