C++ 查找二叉树高度

C++ 查找二叉树高度,c++,tree,binary-tree,C++,Tree,Binary Tree,我正试图写一个函数来计算二叉树的高度。当我打印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

我正试图写一个函数来计算二叉树的高度。当我打印
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--;
    }
}
int树高(tree*p)
{
静态int maxi=0;
静态int i=0;
if(p==NULL)
{
返回最大值;
}
其他的
{
如果(p->left!=NULL | | p->right!=NULL)
{
i++;
}
其他的
{
i++;
if(maxileft);
树高(p->右);
我--;
}
}

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

为什么你需要在那里输入静态变量
i
maxi
?你不需要这些变量来计算二叉树的高度。

如果你没有禁用警告,编译器会告诉你你忘记了什么。这里有一个std::max()函数在这里会很有用。还有一个
const
关键字应该加进去。除此之外,代码更清晰!如果树中只有一个节点,那么树的高度应该是0。但是您的代码将返回1。@user2105632根据NIST的定义,在这种情况下,我想您是对的,一个只有一个节点的树高度为0时,一个简单的更改是当
p==NULL时返回-1