C AVL树递归,函数最小化

C AVL树递归,函数最小化,c,avl-tree,C,Avl Tree,我制作了这两个函数,用于查找任何AVL树是否包含以“a”开头的字符串: int check2( int x, AVLNode T ) { if(x == 1) return 0; if( T != NULL ) { x += check2( x, T->Right ); if(T->Word[0] == 'a') x++; x += check2( x, T->Le

我制作了这两个函数,用于查找任何AVL树是否包含以“a”开头的字符串:

int check2( int x, AVLNode T )
{
    if(x == 1)
        return 0;

    if( T != NULL )
    {
        x += check2( x, T->Right );
        if(T->Word[0] == 'a')
            x++;
        x += check2( x, T->Left );
    }
    return x;
}


int check( AVLNode T )
{
    return check2( 0, T );
}
AVL在哪里

typedef struct node* AVLNode;

    struct node
    {
        char Word[MAX_WORD_SIZE];
        AVLNode Left;
        AVLNode Right;
    };

一切都很好,但我使用的是
check(T)仅调用
check2(0,T)
并将0传递给它,有没有办法只使用
check()
而不是调用一个只调用另一个函数的函数来传递0的初始值呢?

因为C不像C那样有默认参数++

int check2(AVLNode T, int x = 0)
{
//...
}
而不是函数重载

int check2(int x, AVLNode T)
{
//...
}
int check2(AVLNode T)
{
  return check2(0, T)
}

你有两种选择:使用C++或使用丑陋定义< /P> 定义:

#define check2(n) check2(0, n)
int main() {
    AVLNode node;
    check2(node); // Expands to check2(0, node)
}

谢谢你,雅各布!,在某些情况下,那个丑陋的女孩看起来很帅。