【发布时间】:2014-10-11 11:21:47
【问题描述】:
如何递归地为二叉树实现析构函数?
一个节点有一个元素、一个指向左节点的指针和一个指向右节点的指针。 还有,什么时候设置左右节点指针为NULL?
【问题讨论】:
-
简短的回答是,我不会。但是,如果您必须这样做,下面的所有答案都会这样做(至少在此评论发布时间)。选择一个符合您的树形布局的。
如何递归地为二叉树实现析构函数?
一个节点有一个元素、一个指向左节点的指针和一个指向右节点的指针。 还有,什么时候设置左右节点指针为NULL?
【问题讨论】:
析构函数会自动递归到成员中。您几乎不必手动编写析构函数。
template<class T>
struct Node
{
T data;
std::unique_ptr<Node<T>> left, right;
};
template<class T>
struct BinaryTree
{
std::unique_ptr<Node<T>> root;
};
【讨论】:
记住 o11c 的回答,如果您选择不使用智能指针并且需要为裸指针指向的节点实现析构函数,请使用后序遍历。
【讨论】:
如何递归地为二叉树实现析构函数?
像这样:
~BinaryTreeNode()
{
delete _left;
delete _right;
}
另外,什么时候将左右节点指针设置为NULL?
从不在析构函数中。您可以在节点删除方法中做一个或另一个,或者两者都做。
【讨论】: