将树结构数据存储到C中的数组中

将树结构数据存储到C中的数组中,c,pointers,data-structures,tree,C,Pointers,Data Structures,Tree,我正在尝试编写一个代码,使用inorder TRANSCRANCEL遍历树数据结构,并将所有节点存储到一个数组中 我在下面提出了这段代码,但它不起作用,因为之前任何递归的索引都已经在函数中传递了 int *inorderTransversal(AVLTreeNode *node, AVLTreeNode *array[], int index) { if (node == NULL) return index; inorderTransversal(node-&

我正在尝试编写一个代码,使用inorder TRANSCRANCEL遍历树数据结构,并将所有节点存储到一个数组中

我在下面提出了这段代码,但它不起作用,因为之前任何递归的索引都已经在函数中传递了

int *inorderTransversal(AVLTreeNode *node, AVLTreeNode *array[], int index)
{
    if (node == NULL)
        return index;

    inorderTransversal(node->left, array, index);
    nodesArray[index] = node;
    index++;
    inorderTransversal(node->right, array, index);
    return index; 
}
我知道我可以在函数中声明一个静态的“index”值,它可能会工作吗?但缺点是它会使“索引”在整个程序期间都留在内存中,例如

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

    inorderTransversal(node->left, array);
    nodesArray[index] = node;
    index++;
    inorderTransversal(node->right, array);
    return; 
}
或者我可以在函数外部声明索引?e、 g

AVLTreeNode *array[tree->size]; 
int index = 0; 

void *inorderTransversal(AVLTreeNode *node) { 
    if (node == null) 
        return; 

    inorderTransversal(node->left); 
    array[index] = node; 
    index++;
    inorderTransversal(node->right); 
} 

有人能帮我修改代码,在函数中包含“索引”增量,而不使用static吗?非常感谢

你的第一次尝试很接近。您希望以
int*
的形式传入
索引。然后可以取消引用并更新它

void inorderTransversal(AVLTreeNode *node, AVLTreeNode *array[], int *index)
{
    if (node == NULL)
        return;

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

调用此函数时,传递已初始化为0的
int
的地址。当递归结束时,它将保存列表中的元素数。

你是我海上的灯塔@我很高兴能帮上忙。如果您觉得它有用,请随意使用。您必须在函数外部声明数组(在调用它之前)。你还打算怎么调用它?我想说‘index’…如果你定义了返回
int*
的函数,为什么要返回
index
(这是一个
int
)?