我正在开发一个函数来查找二叉搜索树的高度。我找到了一个似乎应该工作的方法,但我一直得到这个错误,我不知道它有什么问题: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();
如果我还要包含其他内容,请告诉我。谢谢!
答案 0 :(得分:6)
if (node = NULL)
应该是
if (node == NULL)
因为在C ++中=
是一个赋值运算符,而==
是用于比较的关系运算符。
为什么会崩溃?
执行if (node = NULL)
时,您正在为节点分配NULL
,因为NULL为0
,if
条件失败。所以你继续在节点的子节点上递归调用函数。现在假设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)强>