bool isContainedSameForm(AG ag1, AG ag2){
if(isEmpty(ag2)) return false;
return isContainedSameForm(ag1->pH,ag2->pH) && isContainedSameForm(ag1->sH,ag2->sH);
};
int sameFormOcurrences(AG ag1,AG ag2,bool (*isContainedSameForm)(AG,AG)){
if(isEmpty(ag2)) return 0;
int ret=0;
if(isContainedSameForm(ag1,ag2)) ret=1;
return ret + sameFormOcurrences(ag1,ag2->pH,isContainedSameForm) + sameFormOcurrences(ag1,ag2->sH,isContainedSameForm);
};
int sameFormOcurrences(AG ag1, AG ag2){
return sameFormOcurrences(ag1,ag2,isContainedSameForm);
}
AG是一个普通的树,这计数相同形式的树有多少次出现在第二树C/C++函数的参数
我不明白的是第一个目的sameFormOcurrences函数接收isContainedSameForm参数。
仅仅是改变签名而不改变它的名字的一种方法? 如果它试图避免未定义的方法,那么它是否与上面已经声明的函数重复?
是的,在这种情况下它有什么用途? –
这是一个谓词。这意味着您可以传递不同的算法来检查它是否包含在同一个表单中,而不会更改sameFormOcurrences。 –
它可以让你使用你自己的函数,而不是硬编码到'isContainedSameForm'中,就像使用普通的函数调用一样。参数具有相同名称的事实是无关紧要的。 –