二叉树,从树中删除后删除节点

时间:2018-01-11 16:04:44

标签: c++ memory tree avl-tree

我正在实现一个AVL树。从树中删除节点正如预期的那样工作,例如,如果我删除节点的左叶,则子节点将指向nullptr。

但是,由于该(现已删除)节点曾经使用' new' -keyword创建,是否有必要以某种方式释放它占用的内存?我的节点看起来像这样:

    struct Node {
       const int key;
       short balance = 0;
       Node* left = nullptr;
       Node* right = nullptr;

       Node(const int key);
       Node(const int key, Node *left, Node *right);
       ~Node();
    }

我所说的是:即使已删除的节点不再包含在树中,例如什么都没有指向它,它是否超出范围'并自动从内存中删除?或者我必须将它的右/左指针设置为nullptr?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

但是,因为那个(现在已删除)节点曾经用。创建过   '新' - >关键字,是否有必要以某种方式释放它所需的内存   吗?

这不是强制性的,但如果您想避免在某些时候吃掉所有内存,那么您需要,并且使用delete关键字

  

我所说的是:即使删除的节点不包括在内   树,例如,什么都没有指向它,它是否会出现   范围'并自动从内存中删除?

不,c++

中没有垃圾收集器

还有更多"现代"如何做你正在做的事情,但我觉得这比其他事情更像是一种学习练习,在这种情况下,将delete来电与你的new电话进行手动匹配是一种了解内容的好方法。继续如果你想要,你可以搜索"智能指针"。

答案 1 :(得分:0)

简而言之:是的。你必须释放记忆。据我所知,C ++只会自动为没有' new'声明的对象释放内存。它们在函数返回时被删除。您可以让删除节点函数返回已删除节点的内存地址,或者只要找到该函数就将其删除。

澄清一下,不,你不必须释放任何内存,因为程序退出时它是免费的,但一旦程序出现内存泄漏是一个糟糕的时间或者它的执行时间增长。