最大功能c树高

lea*_*123 3 c tree max

在c中有一个最大函数,所以我可以做这样的事情来计算树高:或者可能有更好的方法来计算树高.

int height(struct node *tree)
{ 
    if (tree == NULL) return 0;
    return 1 + max(height (tree->left), height (tree->right)); 
}
Run Code Online (Sandbox Code Playgroud)

如果是这样,我需要什么?

目前我收到此错误:

dict-tree.o:在函数'height'中:/
home/ex10/dict-tree.c:36:未定义引用`max'

Rup*_*Rup 7

不,没有内置的.通常你会编写自己的内联函数,例如

static inline int max(int a, int b)
{
    return (a > b) ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

(使用编译器喜欢的'内联'提示语法).但是,在你的情况下,你也可以手动拼出这个 - 这很简单:

int height(struct node *tree)
{ 
    int height_left, height_right;
    if (tree == NULL) return 0;

    height_left = height (tree->left);
    heigth_right = height (tree->right);

    return 1 + ((height_left > height_right) ? height_left : height_right);
}
Run Code Online (Sandbox Code Playgroud)

注意最大宏陷阱.做某事很诱人

#define MAX(a,b) (((a) > (b)) ? (a) : (b))
Run Code Online (Sandbox Code Playgroud)

然后你可以将它用于任何输入而不管它们的类型,但这里的问题是如果任何一个输入表达式都有副作用,例如MAX(++i, ++j).那么问题是,无论哪个输入是最大值,副作用都会被评估两次.如果要编写最大代码,则必须使用(内联)函数而不是宏.不幸的是,因为你在C而不是C++而没有重载/模板,这将限制你为每个命名的max函数设置一组输入/输出类型.