在使用 In Order 遍历成员函数时引发异常(堆栈溢出)时出现问题

Having an issue with an exception (Stack overflow) being thrown when using an In Order traversal member function

本文关键字:堆栈 栈溢出 异常 问题 In Order 遍历 函数 成员      更新时间:2023-10-16

我正在尝试在二叉搜索树上测试我的递归顺序遍历函数,但是当我调用该特定函数以显示树上的节点时,我不断收到异常(堆栈溢出(。我是否缺少代码的关键部分?

我尝试在其他地方查找如何处理异常,但到目前为止没有任何效果。我还将函数更改为const,因为我不确定这是否是编译器(Visual Studio 2017(想要的。我已经测试了预购和后序遍历函数,两者都按预期工作。

按顺序遍历函数是另一个类的私有成员函数,由单独的公共函数调用,该函数只是将树的root传递给displayInOrder

void displayInOrder(TreeNode *&root) const {
if (root == NULL) {
return;
}
else if (root) {
displayInOrder(root);
cout << root->value << " ";
displayInOrder(root->right);
}
}

在二叉树应用程序中0x00C22FE9抛出异常.exe: 0xC0000005:访问违规写入位置0x00CA0F60。

displayInOrder(root);

应该是

displayInOrder(root->left);

第一个版本是无限递归的,因为您正在使用完全相同的参数调用相同的函数。正如您所发现的,这会导致堆栈溢出。