如何在C ++中为BST实现析构函数?我正在创建一个将在析构函数中调用的单独函数。它也是BST的模板。
这是一堂课所以请不要代码。只是逻辑或一些伪代码谢谢!
答案 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中不需要任何递归的所有节点。这个想法如下:
此过程最终会删除树中的所有节点,不需要递归,并且只需要不断的额外空间。
那就是说......你的辅助函数不能有参数真的很奇怪。这听起来像是一个非常随意的限制。你可能想问为什么会这样。