C++ 二叉树高度函数

C++ 二叉树高度函数,c++,data-structures,binary-tree,C++,Data Structures,Binary Tree,我正在做一个函数,用来计算二叉搜索树的高度。我发现了一个似乎应该可以工作的方法,但我一直收到这个错误,我不知道它出了什么问题:PA5.exe中0x00903417处的未处理异常:0xC0000005:访问冲突读取位置0x00000004 这是我的身高函数 template <class T> int BST<T>::height() { return displayHeight(mRootNode); } template <class T&g

我正在做一个函数,用来计算二叉搜索树的高度。我发现了一个似乎应该可以工作的方法,但我一直收到这个错误,我不知道它出了什么问题: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;
}
模板
intBST::height()
{
返回显示高度(mRootNode);
}
模板
int BST::显示高度(BST*节点)
{
if(node=NULL)
{
返回0;
}
int left=显示高度(节点->mLeft);
int right=显示高度(节点->右侧);
如果(左>右)
返回1+左;
其他的
返回1+权限;
}
这是实现中的主要功能

 cout << endl << "height: " << tree.height();
cout
应该是

if (node == NULL)
因为在C++中,代码>=<代码>是赋值运算符,<代码>=< /COD>是关系运算符,比较。 为什么要撞车?


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

在if语句中为节点参数变量指定null

if (node = NULL)
{
    return 0;
}
应该是

if(node == NULL) ...

方法在创建树(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--;

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

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

do if(节点==NULL) 而不是
如果(node=NULL)

Wow。伙计,我就知道会是这样。谢谢,伙计@用户1698667:不客气。我们都这样做过:),我看你对SO还不熟悉,没有接受你提出的3个问题中的任何一个的答案。如果你发现一个答案完全解决了你的问题,你可以点击答案旁边的复选标记来接受答案。哎呀,我的错。我会的!欢迎来到Stackoverflow!你的答案是正确的,但是它已经在4年前发布了。我写了同样的代码,但是我得到的答案比要求的答案多了一个。因此,为了纠正这种情况,在null条件下,它应该返回-1,而不是0。
if(root->left && flagl==1)
nl--;
else if(root->left && flagr==1)
nr--;