2011-02-16 45 views
3

c中是否有最大值函數,所以我可以這樣計算樹高 :或者有更好的方法來計算樹高。max function c tree height

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

若然包括我需要?

目前我得到這個錯誤:

字典-tree.o:在功能 '高度':
/home/ex10/dict-tree.c:36:未定義的引用`最大」

回答

2

大概是因爲max是未定義功能,

嘗試執行之前繼續第一最大值。

int max(int a, int b) { 
    if(a > b) return a; 
    else return b; 
} 
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; 
} 
7

沒有,沒有一個建立在通常你會寫自己的內聯函數,例如

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

(使用編譯器偏好的任何'inline'提示語法)。不過,在你的情況下,你可能只是手工拼寫出來 - 這很簡單:

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++而沒有重載/模板,這將限制您爲每個命名爲max函數的一組輸入/輸出類型。

2

不,沒有。有一系列函數可以計算浮點值的最大值(請參閱fmax()和朋友),您當然可以使用它們,但我認爲在本地執行操作會更容易。

喜歡的東西:

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

這是錯的沒有`1 + ...` – 2011-02-16 14:33:42

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

如果//別的比函數max在這種情況下更好

相關問題