2013-04-14 176 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'关键字应该放在其中。除此之外,更清晰的代码! –