二叉树高度函数

时间:2012-10-24 01:57:37

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

我正在开发一个函数来查找二叉搜索树的高度。我找到了一个似乎应该工作的方法,但我一直得到这个错误,我不知道它有什么问题: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;
}

这是主要功能......

的实现
 cout << endl << "height: " << tree.height();

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

4 个答案:

答案 0 :(得分:6)

if (node = NULL)

应该是

if (node == NULL)

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

为什么会崩溃?

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

答案 1 :(得分:1)

您正在if语句中为节点参数变量赋值null。

if (node = NULL)
{
    return 0;
}

应该是

if(node == NULL) ...

答案 2 :(得分:1)

创建树时查找高度的方法(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--;

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

答案 3 :(得分:0)

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

do if(node == NULL) 代替 如果(节点= NULL)