你如何在C ++中实现BST的析构函数?

时间:2016-05-21 17:32:02

标签: c++ data-structures binary-search-tree

如何在C ++中为BST实现析构函数?我正在创建一个将在析构函数中调用的单独函数。它也是BST的模板。

这是一堂课所以请不要代码。只是逻辑或一些伪代码谢谢!

3 个答案:

答案 0 :(得分:3)

我宁愿不写任何析构函数。

只需确保BST类将unique_ptr存储到根节点,并且每个节点将unique_ptr-s存储到其子节点。然后,当BST对象被破坏时,整个树将被自动销毁。

答案 1 :(得分:1)

我看到它完成的方法是使用一些递归函数,一直到叶子,删除子节点并在指针向上移动到根时将其置零。

function recursiveRelease(root)
if root!= null
  if (leftchild)
    recursiveRelease(leftchild)
    remove leftchild from tree
    make pointer to leftchild = nullptr
  if (rightchild)
    recursiveRelease(rightchild)
    remove rightchild from tree
    make pointer to rightchild = nullptr

之后根被摧毁;希望这有帮助!

答案 2 :(得分:1)

有一个O(n)-time,O(1)空间算法,用于删除BST中不需要任何递归的所有节点。这个想法如下:

  • 如果根没有左子节点,则缓存指向树右子节点的指针,删除根节点,然后继续删除曾经是正确子树的树。
  • 否则,如果root有一个左子,请执行tree rotation将左子项旋转到根目录上。

此过程最终会删除树中的所有节点,不需要递归,并且只需要不断的额外空间。

那就是说......你的辅助函数不能有参数真的很奇怪。这听起来像是一个非常随意的限制。你可能想问为什么会这样。