c - 将完整二叉树存储到数组中的算法

标签 c arrays algorithm binary-tree

我现在正在学习数据结构,从书上我知道对于一个完整的二叉树,我们可以将它存储在一个数组中。但我无法用它提出算法,也无法将数组转换为完整的二叉树。谁能用C语言帮我解决这个问题? 我觉得这样的问题可以用递归的方式解决,就像二叉树的遍历一样,但是我做不到,也不能用非递归的方法解决。

最佳答案

您需要一个调用函数指针的遍历按序函数。

编辑:正如@Peter Skarpetis所指出的,您可以避免使用全局变量或static在函数指针之后传递额外的参数:

struct container {
    void *data;
    int count;
};

void tree_walk_recurse(const t_node *node, void (*func)(void *, void *), void *data)
{
    if (node->left) tree_walk_recurse(node->left, func, data);
    func(node->data, data);
    if (node->right) tree_walk_recurse(node->right, func, data);
}

void tree_walk(const t_node *root, void (*func)(void *, void), void *data)
{
    if (root && func) tree_walk_recurse(root, func, data);
}

void insert(void *data, void *ptr)
{
    struct data *array = ptr;

    array->data[array->count++] = data;
}

/* Traverse in-order using insert */
struct container array;

array.data = malloc(sizeof(struct data) * n);
array.count = 0;
tree_walk(root, insert, &array);

关于c - 将完整二叉树存储到数组中的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39202230/

相关文章:

c - `integer conversion rank` 定义不明确

c - 带无符号操作数的类型转换 - C

arrays - 在 Google 表格中查询结果中的 Vlookup 文本

java - 为什么java中的double if语句返回数组中的空搜索

string - 找到带约束的最长子串的最佳算法是什么?

c - 尝试扫描 C 中用户指定文件中的换行数

c - 将二进制文件读入 char* 并转换为结构体?

javascript - object.push(array) 不起作用

algorithm - 如何删除重复的矩阵(以数组表示)?

java - 如何让我的程序执行随机方法?