用栈实现二叉搜索树的非递归析构
non recursive destructor for binary search tree by implementing stack
这段代码有一个运行时错误,我在确定问题是什么时遇到了问题。栈类有一个基本的栈操作(pop push top),用于保存遍历的位置。
parityBST::~parityBST()
{
if (root == NULL)
{
return;
}
else
{
//postOrder non recursive traversal for destructor
stack* s1 = new stack();
s1->push(root);
binaryNode* nodePtr= root;
while (!s1->isEmpty())
{
//RUNTIME ERROR HERE (after several iterations)
if (nodePtr->left)
{
s1->push(nodePtr->left);
nodePtr = nodePtr->left;
} else if (nodePtr->right)
{
s1->push(nodePtr->right);
nodePtr = nodePtr->right;
} else
{
delete nodePtr;
s1->pop();
nodePtr = s1->getTop();
}
}
}
}
您在(nodePtr的父级)->left中delete
为nodePtr,但未将其更改为null,因此您再次进入。
尝试添加这个:
s1->pop();
binaryNode* parent = s1->getTop()
if (parent->left==nodePtr)
parent->left = NULL;
else
parent->right = NULL;
delete nodePtr;
nodePtr = parent;
相关文章:
- 通过递归进行因子分解
- 什么时候调用组成单元对象的析构函数
- 递归导致程序崩溃,但 while 循环中的相同概念不是来自C++析构函数
- 递归列表:调用析构函数的所有内容
- 这个递归类需要一个自定义析构函数?
- 链表的递归析构函数
- C++二进制树递归析构函数问题
- 是否可以在容器之类的堆栈中创建非递归析构函数
- 析构函数、图和递归性
- 是否应始终在析构函数中清除/归零成员数据
- 二叉树析构函数的递归调用
- 二叉树的递归析构函数
- C++中的慢速递归析构函数调用
- 指向"raw"资源的指针是否应该在析构函数中归零?
- C++中的递归析构函数
- 使用堆栈的非递归析构函数二叉搜索树
- 用栈实现二叉搜索树的非递归析构
- 如何在递归选择排序算法中调用类析构函数
- 是链表、树等的递归析构函数
- 二进制搜索树递归析构函数