C 在二叉树中应用逐级函数,参数为级别的第一个元素
使用宽度优先树遍历时,如何在二叉树中的每个节点上调用函数?此外,函数需要一个参数来告诉它当前节点是否是当前级别的第一个节点 我已经测试了我的代码,但它似乎做得不对,两个节点中的一个被认为是每个级别上的第一个节点。代码如下:C 在二叉树中应用逐级函数,参数为级别的第一个元素,c,binary-tree,breadth-first-search,C,Binary Tree,Breadth First Search,使用宽度优先树遍历时,如何在二叉树中的每个节点上调用函数?此外,函数需要一个参数来告诉它当前节点是否是当前级别的第一个节点 我已经测试了我的代码,但它似乎做得不对,两个节点中的一个被认为是每个级别上的第一个节点。代码如下: int btree_level_count(t_btree *root) { int lvl_left; int lvl_right; if (!root) return (0); lvl_left = btree_level_count(root-
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]++;
}
}
intbtree\u level\u count(t\u btree*root)
{
左一级整数;
int lvl_右;
如果(!root)
返回(0);
左层=树级计数(根->左);
层右=树级计数(根->右);
返回(1+lvl\U左>lvl\U右?lvl\U左:lvl\U右);
}
void btree_applyf(t_btree*root,int lvl[2],int f_elt,void(*applyf)(void*item,int lvl,int is_first元素))
{
如果(!root)
返回;
如果(lvl[0]==lvl[1])
applyf(root->item,lvl[0],f_elt);
其他的
{
lvl[1]++;
btree_applyf(根->左,层,1,applyf);
btree_applyf(根->右,左,0,applyf);
}
}
按级别(t_btree*根,void(*applyf)(void*项,int当前级别,int为第一元素))应用void btree\u
{
内部高度;
int-lvl[2];
如果(!root)
返回;
高度=b树\水平\计数(根);
lvl[0]=0;
lvl[1]=0;
而(层[0]<高度)
{
btree_applyf(根,层,1,applyf);
lvl[0]++;
}
}
我对每个函数的参数数量使用任意限制,因此数组表示级别和当前级别。我不理解最后一句话的目的/意义。为什么是数组,为什么是任意限制?如果节点是级别中的“第一个”,则只需进行遍历并进行一些额外的计算,对吗?还有,这里的“第一”是什么意思?第一是指最左边的那个。该限制由分配施加(其他限制,如每个函数25行,每个文件5个函数)