c++ - 二叉搜索树析构函数

标签 c++ data-structures recursion

致力于在 C++ 中实现我自己的 BST,以获得处理此类结构的经验。

我在实现析构函数时遇到了问题。我在我的研究中发现,一个人不能真正拥有递归析构函数(由于一个标志不允许在被调用后对同一个对象调用析构函数),但我真的不确定任何成功清理树中所有节点的其他方法。

作为补偿,我创建了一个辅助函数——但是这会在“delete n”行上抛出一个 Unresolved external 错误。有什么建议吗?

代码:

void BinSearchTree::Clear(tNode* n)
{
    if (n->left != NULL)
        Clear(n->left);
    if (n->right != NULL)
        Clear(n->right);
    delete n;
    n = NULL;
    size--;
}

最佳答案

你可以有一个递归析构函数;您不能做的是将同一个对象删除两次。

在 C++ 中删除树的典型方法可能是这样的:

BinSearchTree::~BinSearchTree()
{
   delete _rootNode;  // will recursively delete all nodes below it as well
}

tNode::~tNode()
{
   delete left;
   delete right;
}

关于 Unresolved external 错误——是在您尝试编译/链接程序时抛出的错误吗?如果是这样,可能是因为 tNode 类的代码(特别是 tNode 析构函数,如果您声明了一个)不存在或没有被编译到您的项目中。

关于c++ - 二叉搜索树析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018686/

相关文章:

c++ - 如何从非空函数返回?

c++ - 静态多态性中的歧义

用于存储(插入/获取/删除)具有整数值多键的结构的 C++ 容器是指针

algorithm - n 叉树和 m 叉树之间有什么区别吗?

algorithm - 从大量条目中随机详尽(非重复)选择

c - printf 的执行在递归 main 函数中不明确

kotlin - kotlin 中这些 tailrec 函数有什么不同

c++ - 通过返回指向 map 的指针访问 map C++

c# - 二叉搜索树的递归函数实现

python - [[...]] 在 python 中是什么意思?