64_二叉树的结点删除与清除

2018-07-27  本文已影响20人  编程半岛

关键词:二叉树的结点的删除、二叉树的结点的清除

0. 删除的方式

    virtual void remove(BTreeNode<T>* node, BTree<T>*& ret)
    {
        ret = new BTree<T>();

        if( ret != NULL )
        {
            if( root() != node )
            {
                BTreeNode<T>* p = dynamic_cast<BTreeNode<T>*>(node->parent);

                if( p->left == node )
                {
                    p->left = NULL;
                }
                else if( p->right == node )
                {
                    p->right = NULL;
                }

                node->parent = NULL;
            }
            else
            {
                this->m_root = NULL;
            }

            ret->m_root = node;
        }
        else
        {
            THROW_EXCEPTION(NoEnoughMemoryExcetion, "No memory to create a new tree...");
        }
    }

    SharedPointer< Tree<T> > remove(const T& value)
    {
        BTree<T>* ret = NULL;
        BTreeNode<T>* node = find(value);

        if( node != NULL )
        {
            remove(node, ret);
        }
        else
        {
            THROW_EXCEPTION(InvalidParameterExcetion, "Can not find node via value ...");
        }

        return ret;
    }

    SharedPointer< Tree<T> > remove(TreeNode<T>* node)
    {
        BTree<T>* ret = NULL;

        if( find(node) != NULL )
        {
            remove(dynamic_cast<BTreeNode<T>*>(node), ret);
        }
        else
        {
            THROW_EXCEPTION(InvalidParameterExcetion, "Parameter node is invalid ...");
        }

        return ret;
    }

1. 清除操作

    virtual void free(BTreeNode<T>* node)
    {
        if( node != NULL )
        {
            free(node->left);
            free(node->right);

            if( node->flag() )
            {
                delete node;
            }
        }
    }

    void clear()
    {
        free(root());

        this->m_root = NULL;
    }

2. 小结

声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

上一篇下一篇

猜你喜欢

热点阅读