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