【问题标题】:Recursion with AVL trees, function minimization使用 AVL 树进行递归,函数最小化
【发布时间】:2020-12-17 10:15:33
【问题描述】:

我已经创建了这两个函数来查找任何 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 avl-tree


    【解决方案1】:

    因为 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)
    }
    

    【讨论】:

    • 谢谢你,Jacob!在某些情况下,这个丑陋的定义看起来很帅。
    猜你喜欢
    • 2014-05-01
    • 2014-05-27
    • 2018-03-13
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2013-03-22
    • 2020-09-09
    相关资源
    最近更新 更多