我有这个函数可以找到二叉树的预序。我有点不确定如何编辑它来存储遍历而不是打印它。我可能想将它存储在一个数组中,这样我就可以将它与另一个遍历进行比较,但是在这个函数中创建一个数组将是一个问题,因为我递归地实现了它。有任何想法吗? 我正在考虑向它传递一个空数组,但由于函数是递归的,我似乎无法想象我将如何递增数组。
void preorder(node *node)
{
if(node == NULL)
return;
printf("%d", node->data);
preorder(node->left);
preorder(node->right);
}
最佳答案
您走在正确的轨道上。是的,传入一个最初为空的数组。还要传递一个初始化为 0 的索引,以跟踪您填充了多少数组。*index
表示下一个可用于填充数据的数组索引。仅当您在数组中填充数据时才增加索引。递归情况将自然处理。每次调用 inorder
都会将索引递增 1。
void inorder(node *node, int *array, int *index)
{
if (node == NULL)
return;
inorder(node->left, array, index);
array[(*index)++] = node->data;
inorder(node->right, array, index);
}
关于c - 存储树的遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42756655/