删除二叉搜索树的所有节点
Delete all nodes of a binary search tree
我有一个二叉搜索树,如下面的代码所示。例如,在程序开始时,我为树的一个实例和一些节点动态分配内存。
如何正确地删除所有节点,我应该更好地为此编写什么析构函数?
TreeNode.h:
class TreeNode {
private:
unsigned __int64 _id;
string _data;
public:
TreeNode *left;
TreeNode *right;
TreeNode *parent;
TreeNode(const string &str);
TreeNode();
~TreeNode();
};
TreeNode.cpp
TreeNode::TreeNode(const string &str) {
left = nullptr;
right = nullptr;
parent = nullptr;
_data = str;
_id = (unsigned __int64)this;
cout << "n_id=" << _id << "; "this"=" << hex << this << dec << endl;
cout << "Node initialized" << endl;
}
TreeNode::TreeNode() {
left = nullptr;
right = nullptr;
parent = nullptr;
_data = "";
_id = (unsigned __int64)this;
}
TreeNode::~TreeNode() {
//don't know how to implement
}
Tree.h:
class Tree {
public:
TreeNode *root;
Tree();
Tree(TreeNode *node);
~Tree();
};
Tree.cpp:
Tree::Tree() {
root = nullptr;
}
Tree::Tree(TreeNode *node) {
root = node;
}
Tree::~Tree() {
//don't know how to implement
}
对于节点本身,您不需要为节点的任何成员分配任何内存,因此不需要在那里使用析构函数。默认值就足够了。
实际的树析构函数必须处理指针。它们占用内存,所以必须删除。处理每个节点的算法应该如下所示:
- 如果节点没有子节点,则它是叶节点。简单地删除。
- 如果节点有任何子节点,删除它们。
这应该在Tree的析构函数调用的帮助函数的帮助下递归地完成。
相关文章:
- C++二叉搜索树模板从函数返回节点
- 二叉搜索树使用最常用的节点来打印出某些语句
- 返回二叉搜索树特定级别的节点数的函数
- 无法打印完整的二叉搜索树,因为我从最低节点向后迭代的逻辑有缺陷
- 使用二进制搜索树中的迭代器对象访问左侧节点
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- 删除节点方法实际上不会删除二叉搜索树中的节点.C++
- 在C++中实现二叉搜索树,搜索不起作用.尝试打印节点的元素会导致输出崩溃
- 二叉搜索树按级别递归C++打印节点
- 插入到二叉搜索树中.节点替换
- 如何替换二叉搜索树中的节点
- C++ 从二叉搜索树中删除具有两个子节点的特定节点
- 检查节点是否是二进制搜索树的根
- 在二进制搜索树中删除节点
- 如何从二进制搜索树中删除节点
- 从C++二进制搜索树中删除一个节点(类而非结构)
- 从基于矢量的二叉搜索树中删除节点的最佳方法
- 为什么我的原始二叉搜索树被修改,即使我在另一个节点中复制了根节点
- 为什么这个计算二进制搜索树中节点的递归函数总是返回比预期更大的结果
- 二进制搜索树中的根节点为空