二进制树高功能

Binary Tree Height Function

本文关键字:功能 高功能 二进制      更新时间:2023-10-16

我正在研究一个函数,以找到二进制搜索树的高度。我找到了一种看起来应该可以工作的方法,但是我一直遇到此错误,但我不知道该方法有什么问题:pa5.exe中的0x00903417 inthendered例外:0xc000000005:访问违规读取位置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;
}

这是主函数中的实现...

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

如果我应该包括其他任何东西,请告诉我。谢谢!

if (node = NULL)

应该是

if (node == NULL)

因为在C 中=是一个分配运算符,==是进行比较的关系操作员。

为什么崩溃?

进行if (node = NULL)时,您将NULL分配给节点,并且由于null为0 if条件失败。因此,您继续向节点的孩子递归地致电该功能。现在假设node第一次调用功能时实际上是无效的,您将对Null的左右孩子进行递归电话!!!导致崩溃。

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

if (node = NULL)
{
    return 0;
}

应该是

if(node == NULL) ...

在创建树时查找高度的方法:对于左子树和右子树::

在创建实际树之前,将要放入数组中的二进制树中。计算大于根的元素数量,该元素将在树的左侧,并且与右侧类似。

然后,将元素添加到树上时。每次将标志位设置为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--;

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

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

if(node == null)代替 if(node = null)