【问题标题】:Binary Tree Height Function二叉树高度函数
【发布时间】:2012-10-24 01:57:37
【问题描述】:

我正在开发一个函数来查找二叉搜索树的高度。我找到了一种似乎应该可以工作的方法,但我一直收到此错误,我不知道它有什么问题: PA5.exe 中 0x00903417 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000004。

这是我的身高函数...

template <class T>
int BST<T>::height()
{

    return displayHeight(mRootNode);    

}

template <class T>
int BST<T>::displayHeight(BST<T> *node)
{
    if (node = NULL)
    {
        return 0;
    }

    int left = displayHeight(node->mLeft);
    int right = displayHeight(node->mRight); 

    if (left > right)
        return 1 + left;
    else
        return 1 + right;
}

这是main函数中的实现……

 cout << endl << "height: " << tree.height();

如果我应该包含其他内容,请告诉我。谢谢!

【问题讨论】:

  • 我写了相同的代码,但我得到的答案比要求的答案多一个。因此,要在 null 条件下更正它应该返回 -1 而不是返回 0。

标签: c++ data-structures binary-tree


【解决方案1】:
if (node = NULL)

应该是

if (node == NULL)

因为在 C++ 中= 是赋值运算符,而== 是用于比较的关系运算符。

为什么会崩溃?

当您执行if (node = NULL) 时,您将NULL 分配给节点,并且由于NULL 是0if 条件失败。因此,您继续在节点的子节点上递归调用该函数。现在假设第一次调用函数时node 实际上是 NULL,你将对 NULL 的左右孩子进行递归调用!!!导致崩溃。

【讨论】:

  • 哇。伙计,我只知道会是这样。谢谢,伙计!
  • @user1698667:不客气。我们都这样做了:),我看到您是 SO 新手,并且没有接受您提出的 3 个问题中的任何一个的答案。如果您找到完全解决您的问题的答案,您可以通过单击答案旁边的复选标记继续并接受该答案。
  • 哎呀,我的错。我会这样做的!
【解决方案2】:

您在 if 语句中将 null 分配给节点参数变量。

if (node = NULL)
{
    return 0;
}

应该是

if(node == NULL) ...

【讨论】:

    【解决方案3】:

    创建树时求高度的方法(BST):对于左子树和右子树::

    在创建实际的树之前,将要放入二叉树的元素放入一个数组中。 计算大于根的元素个数,将向树的左侧移动,右侧类似。

    然后,当您将元素添加到树中时。每次将标志位设置为 1 或 0,具体取决于您是将其添加到左子树还是右子树。

    if(root->right && flagleft==1)
         no_left--;
         else if(root->right && flagright==1)
             no_right--;
    

    这是在您将节点附加到左侧时。

    if(root->left && flagl==1)
    nl--;
    else if(root->left && flagr==1)
    nr--;
    

    这是在您将节点附加到右侧时。

    【讨论】:

      【解决方案4】:

      这是因为您已将节点分配给 NULL 即 NULL 值为 0 ,因此条件失败。

      如果(节点==NULL) 代替 如果(节点=NULL)

      【讨论】:

      • 欢迎来到 Stackoverflow!你的答案是正确的,但它已经在 4 年前发布了。
      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多