在二进制树中逐级函数应用参数,该参数用于级别的第一个元素

时间:2018-08-15 09:10:02

标签: c binary-tree breadth-first-search

使用广度优先树遍历时,如何在二叉树的每个节点上调用函数?此外,该函数需要一个参数来告诉它当前节点是否是当前级别的 first 节点。

我已经测试了我的代码,但似乎做得不对,两个节点中的一个被认为是每个级别上的第一个节点。这是代码:

int btree_level_count(t_btree *root)
{
  int lvl_left;
  int lvl_right;

  if (!root)
    return (0);
  lvl_left = btree_level_count(root->left);
  lvl_right = btree_level_count(root->right);
  return (1 + lvl_left > lvl_right ? lvl_left : lvl_right);
}

void    btree_applyf(t_btree *root, int lvl[2], int f_elt, void (*applyf)(void *item, int lvl, int is_first_elem))
{
  if (!root)
    return ;
  if (lvl[0] == lvl[1])
    applyf(root->item, lvl[0], f_elt);
  else
  {
    lvl[1]++;
    btree_applyf(root->left, lvl, 1, applyf);
    btree_applyf(root->right, lvl, 0, applyf);
  }
}

void    btree_apply_by_level(t_btree *root, void (*applyf)(void *item, int current_level, int is_first_elem))
{
  int height;
  int lvl[2];

  if (!root)
    return ;
  height = btree_level_count(root);
  lvl[0] = 0;
  lvl[1] = 0;
  while (lvl[0] < height)
  {
    btree_applyf(root, lvl, 1, applyf);
    lvl[0]++;
  }
}

我对每个函数的参数数量使用了任意限制,因此数组代表了级别和当前级别。

0 个答案:

没有答案