我制作了一个二叉树类,其中包含:
int
值,BinaryTree* left
,BinaryTree* right
。
class BinaryTree {
private:
int value;
BinaryTree* left;
BinaryTree* right;
bool isVisited;
public:
BinaryTree();
BinaryTree createComplete(int n);
~BinaryTree();
}
我的析构函数是:
BinaryTree::~BinaryTree() {
delete left;
delete right;
}
在 clion 中运行时它完美运行,但在我的终端中我得到 段错误(核心已转储)。我到处都看到人们声称这应该是析构函数。任何详细说明都会有所帮助!
我不是 stackoverflow 专家,我更新了我的 ~BinaryTree 函数仍然会出现段错误:
BinaryTree::~BinaryTree() {
if (right != NULL) {
delete right;
}
if (left != NULL) {
delete left;
}
}
最佳答案
首先,您当前的实现并不是一棵完整的树。 它是一个节点,因此我建议将它重命名为 BinaryTreeNode 并使用它来构造一个新类 BinaryTree,它跟踪根并允许您递归地释放树。
话虽如此,您的析构函数很可能会出现段错误,因为您正在盲目地尝试删除指针。
首先确保将 left 和 right 初始化为 nullptr。
然后你做 if(left != nullptr) { delete left }
关于C++二叉树递归析构函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792391/