二进制树高功能
Binary Tree Height Function
我正在研究一个函数,以找到二进制搜索树的高度。我找到了一种看起来应该可以工作的方法,但是我一直遇到此错误,但我不知道该方法有什么问题: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)
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 如何获得CMake Tools以在Visual Studio Code中编译具有C++11(或更高版本)功能的程序?
- 我只想获得高质量的功能点
- 指向成员功能的功能指针
- 代码由编译器代替,用于成员功能的功能指针
- 特殊模板功能的功能
- C 如何将数组传递到功能内部功能
- C 过载功能和功能模板 - 不同的行为
- 二进制树高功能
- 该程序应该在课堂上展示建设性和破坏性功能的功能
- 我有什么选择来构建一个在XP及更高版本上运行但具有最新功能的WTL程序
- 为什么我应该使用SetTimer功能,而不是多媒体定时器服务的应用程序不需要高分辨率定时
- C++中的人工智能应用:虚拟功能的成本有多高?可能的优化是什么