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)
}
我创建了这两个函数来查找是否有任何 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)
}