将树结构数据存储到C中的数组中
我正在尝试编写一个代码,使用inorder TRANSCRANCEL遍历树数据结构,并将所有节点存储到一个数组中 我在下面提出了这段代码,但它不起作用,因为之前任何递归的索引都已经在函数中传递了将树结构数据存储到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-&
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
)?