c-AVL树递归,函数最小化



我制作了这两个函数,用于查找任何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)
}

最新更新