2013-04-14 211 views
2

我正在嘗試編寫一個函數來獲取二叉樹的高度。當我打印maxi的值時,該值就是我所期望的值,但是當函數返回該值時,該值始終爲0.有人可以告訴我在這裏做錯了什麼嗎?查找二叉樹高度

int treeHeight(tree *p) 
{ 
    static int maxi=0; 
    static int i=0; 
    if(p==NULL) 
    { 
     return maxi; 
    } 
    else 
    { 
     if(p->left!=NULL||p->right!=NULL) 
     { 
      i++; 
     } 
     else 
     { 
      i++; 
      if(maxi<i) 
      { 
       maxi=i; 
      } 
     } 
     treeHeight(p->left); 
     treeHeight(p->right); 
     i--; 
    } 
} 
+3

如果你沒有禁用警告,編譯器會告訴你你忘了什麼。 –

回答

7

treeHeight功能看起來應該像下面這樣:

int treeHeight(tree *p) 
{ 
    if (p == NULL) 
    { 
     return -1; 
    } 

    int left = treeHeight(p->left); 
    int right = treeHeight(p->right); 

    return 1 + std::max(left, right); 
} 

爲什麼你需要靜態變量imaxi呢?你不需要那些變量來找出二叉樹的高度。

+0

第3行錯誤。 –

+0

@Haroogan抱歉,粗心大意和愚蠢。謝謝。 – taocp

+0

有一個std :: max()函數在這裏很有用。還有一個'const'關鍵字應該放在其中。除此之外,更清晰的代碼! –