我有这个函数可以找到二叉树的预订。我有点不确定如何编辑它来存储遍历而不是打印它。我想将它存储在一个数组中,所以我可以将它与另一个遍历进行比较,但是在这个函数中创建一个数组将是一个问题,因为我递归地实现了它。有任何想法吗? 我正在考虑将它传递给一个空数组,但是我怎么能想象出由于函数是递归的,我是如何在数组中递增的。
void preorder(node *node)
{
if(node == NULL)
return;
printf("%d", node->data);
preorder(node->left);
preorder(node->right);
}
答案 0 :(得分:1)
你走在正确的轨道上。是的,传入一个最初为空的数组。还将初始化为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);
}
答案 1 :(得分:0)
您只需稍微修改前序遍历代码,并使用 COMPAT_SYSCALL_DEFINE1(sysinfo, struct compat_sysinfo __user *, info){
struct sysinfo s;
do_sysinfo(&s);
/* Check to see if any memory value is too large for 32-bit and scale
* down if needed
*/
if (upper_32_bits(s.totalram) || upper_32_bits(s.totalswap)) {
int bitcount = 0;
while (s.mem_unit < PAGE_SIZE) {
s.mem_unit <<= 1;
bitcount++;
}
s.totalram >>= bitcount;
s.freeram >>= bitcount;
s.sharedram >>= bitcount;
s.bufferram >>= bitcount;
s.totalswap >>= bitcount;
s.freeswap >>= bitcount;
s.totalhigh >>= bitcount;
s.freehigh >>= bitcount;
}
if (!access_ok(VERIFY_WRITE, info, sizeof(struct compat_sysinfo)) ||
__put_user(s.uptime, &info->uptime) ||
__put_user(s.loads[0], &info->loads[0]) ||
__put_user(s.loads[1], &info->loads[1]) ||
__put_user(s.loads[2], &info->loads[2]) ||
__put_user(s.totalram, &info->totalram) ||
__put_user(s.freeram, &info->freeram) ||
__put_user(s.sharedram, &info->sharedram) ||
__put_user(s.bufferram, &info->bufferram) ||
__put_user(s.totalswap, &info->totalswap) ||
__put_user(s.freeswap, &info->freeswap) ||
__put_user(s.procs, &info->procs) ||
__put_user(s.totalhigh, &info->totalhigh) ||
__put_user(s.freehigh, &info->freehigh) ||
__put_user(s.mem_unit, &info->mem_unit))
return -EFAULT;
return 0;
}
#endif /* CONFIG_COMPAT */
变量将值保存在数组中。
index