AVL 树递归,函数最小化

Recursion with AVL trees, function minimization

我创建了这两个函数来查找是否有任何 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++ 或使用丑陋的定义

丑定义:

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