最大功能c树高

时间:2011-02-16 14:22:32

标签: c tree max

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

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

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

目前我收到此错误:

  

dict-tree.o:在函数'height'中:
  /home/ex10/dict-tree.c:36:对'max'

的未定义引用

5 个答案:

答案 0 :(得分:7)

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

static inline int max(int a, int b)
{
    return (a > b) ? a : b;
}

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

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);
}

N.B。注意最大宏陷阱。做某事像

很诱人
#define MAX(a,b) (((a) > (b)) ? (a) : (b))

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

答案 1 :(得分:2)

可能因为max是一个未定义的函数,

在继续之前尝试实施最大值。

int max(int a, int b) {
    if(a > b) return a;
    else return b;
}

答案 2 :(得分:2)

不,没有。有一系列函数可以计算浮点值的最大值(请参阅fmax()和朋友),您当然可以自己使用它们,但我认为在本地执行此操作会更容易。

类似的东西:

const size_t left = height (tree->left);
const size_T right = height (tree->right);
return left > right ? left : right;

答案 3 :(得分:0)

如果你愿意使用C ++而不仅仅是普通的C,那就有了。它位于标准模板库中,因此您必须包含必需的文件。请看这里的例子:

http://www.cplusplus.com/reference/algorithm/max/

为方便起见而转载:

// max example
#include <iostream>
#include <algorithm>
using namespace std;

int main () {
  cout << "max(1,2)==" << max(1,2) << endl;
  cout << "max(2,1)==" << max(2,1) << endl;
  cout << "max('a','z')==" << max('a','z') << endl;
  cout << "max(3.14,2.72)==" << max(3.14,2.72) << endl;
  return 0;
}

答案 4 :(得分:0)

int height(struct node *tree)
{ 
if (tree == NULL) 
{
    return 0;
}    
int left = height(tree->left);
int right = height(tree->right);
return (1 + ((left >right)?left:right)); 
}

//在这种情况下,如果else比函数max更好