C++二叉树递归析构函数问题

标签 c++ recursion segmentation-fault binary-tree destructor

我制作了一个二叉树类,其中包含: int 值,BinaryTree* leftBinaryTree* 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/

相关文章:

recursion - OCaml:如何使用相同类型的 Set 参数创建归纳类型

c - 尝试为结构中的字符串分配内存时出现段错误

c - C 中的段错误(核心转储),K&R 练习 2.5 的 C 编程语言

c - Linux 中 C 的段错误(核心转储)

c++ - MFC CdockablePane 改变外观

c++ - OpenCV InputArray 和 getMat 方法

c++ - C++ 类中的内联规则是什么?

c++ - 包括 "Y"在内的元音个数

perl - 在 Perl 中递归打开文件

ruby - 如何增加 ruby​​ 应用程序的堆栈大小。递归应用获取 : Stack level too deep (SystemStackError)