存储树的遍历

时间:2017-03-13 04:29:46

标签: c

我有这个函数可以找到二叉树的预订。我有点不确定如何编辑它来存储遍历而不是打印它。我想将它存储在一个数组中,所以我可以将它与另一个遍历进行比较,但是在这个函数中创建一个数组将是一个问题,因为我递归地实现了它。有任何想法吗? 我正在考虑将它传递给一个空数组,但是我怎么能想象出由于函数是递归的,我是如何在数组中递增的。

void preorder(node *node)
{
    if(node == NULL)
         return;

    printf("%d", node->data);
    preorder(node->left);
    preorder(node->right);
}

2 个答案:

答案 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