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

标签 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->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)
}

关于c - AVL 树递归,函数最小化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65338694/

相关文章:

c - SDL 仅与 main 一起使用,并忽略程序中的其他 .c 和 .h 文件

c - 为什么 fwrite 为某些 double 写入 9 个字节?

c - 将 Exec/System 输出管道传输到 C 中的 char*

algorithm - AVL 树 : How to do index access?

c - AVL比较法,正确与否?

c - C中如何知道avl节点状态?

c - 使用 4.2 OpenGL 时,"glGenTextures"返回 1282 错误

c - 重用 va_list

c++ - 是否可以组合对称代码段?

c++ - 从它的子节点余额计算 AVL 树节点余额