【问题标题】:Find binary tree height查找二叉树高度
【发布时间】:2013-04-14 00:47:51
【问题描述】:

我正在尝试编写一个函数来获取二叉树的高度。当我打印 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--;
    }
}

【问题讨论】:

  • 如果您没有禁用警告,编译器会告诉您您忘记了什么。

标签: c++ tree binary-tree


【解决方案1】:

您的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呢?您不需要那里的那些变量来找出二叉树的高度。

【讨论】:

  • 这里有一个 std::max() 函数会很有用。还有一个const 关键字应该被添加进去。除此之外,更清晰的代码!
  • 如果树中只有一个节点,那么树的高度应该是 0。但是你的代码会返回 1。
  • @user2105632 在这种情况下你是对的我猜,从 NIST 定义来看,具有单个节点的树的高度为 0,一个简单的更改是在 p ==NULL 时返回 -1
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 2021-09-07
  • 2012-10-12
相关资源
最近更新 更多