数据结构 笔记:树节点中的清除操作

清除操作的定义

-void clear()

·将树中的所有结点清除(释放堆中的结点)

清除操作功能的定义

-free(node)

·清除node为根结点的树

·释放树中的每一个结点

树中的结点可能来源于不用存储空间,如何判断堆空间的结点并释放?

-单凭内存地址很难准确判断具体的存储区域

-只有堆空间内存需要主动释放(delete)

-清楚操作时只需要对堆中的结点进行释放

工厂模式

-在GTreeNode中增加保护成员变量m_flag

-将GTreeNode中的Operator new重载为保护成员函数

-提供工厂方法GTreeNode<T>* NewNode()

-在工厂方法中new新结点并将m_flag设置为true

树结点的工厂模式示例

GTreeNode<int>* hn = GTreeNode<int>::NewNode();
GTreeNode<int> sn;

if( hn->flag())    //true
{
    delete hn;
}

hn = &sn;

if( hn->flag() )    //false
{
    delete hn;
}

总结:

-清楚操作用于销毁树中的每个结点

-销毁结点时需要决定是否释放对应的内存空间

-工厂模式可用于“定制”堆空间中的结点

-只有销毁定制结点的时候需要进行释放

猜你喜欢

转载自blog.csdn.net/qq_29962483/article/details/83994177