Храните древовидную структуру данных в массиве, используя поперечный порядок в C

#c #pointers #data-structures #tree

Вопрос:

Я пытаюсь написать код для поперечной структуры данных дерева, используя поперечный порядок, и сохранить каждый узел в массиве.

Я придумал этот код ниже, чтобы достичь этого, пожалуйста, исправьте меня, если код неправильный. Даже если это правильно, должны быть лучшие способы сделать это, чем использование «статического», из-за которого «индекс» остается в памяти до завершения программы.

 void *inorderTransversal(AVLTreeNode *node, int treeSize)
{
    static int index = 0;
    AVLTreeNode *nodesArray[treeSize-1]; 
    if (node == NULL)
        return;

    inorderTransversal(node->left, treeSize);
    nodesArray[index] = node;
    index  ;
    inorderTransversal(node->right, treeSize);
}
 

Ответ №1:

Вы можете объявить массив на основе размера дерева и сохранить его.

 int[treeSize] array = new int[treeSize]; 
int index = 0; 
void *inorderTransversal(AVLTreeNode *node) { 
    if (node == null) 
        return; 
    inorderTransversal(node->left); 
    array[index  ] = node.value; 
    inorderTransversal(node->right); 
} 
 

Комментарии:

1. Есть ли способ включить индекс в саму функцию?

2. @BobbyLi, нет, зачем вам это нужно внутри функции?

3. Потому что я хочу, чтобы индекс был локальным значением.