数据结构 笔记:树中结点的插入操作

插入的方式

-插入新结点

·bool insert(TreeNode<T>* node)

-插入数据元素

·bool insert(const T& value,TreeNode<T>* parent)

如何指定新结点在树里面的位置

插入新结点之前,必须先找到前驱结点

bool insert(TreeNode<T>* node)
    {
        bool ret = true;

        if(node != NULL)
        {
            if(this->m_root == NULL)
            {
                node->parent = NULL;
                this->m_root = node;
            }
            else
            {
                GTreeNode<T>* np = find(node->parent);

                if( np  != NULL)
                {
                    GTreeNode<T>* n = dynamic_cast<GTreeNode<T>*>(node);

                    if( np->child.find(n) < 0)
                    {
                        np->child.insert(n);
                    }
                }
                else
                {
                    //抛出异常
                }
            }
        }
        else
        {
            //抛出异常
        }
        return ret;
    }

插入数据元素

bool insert(const T& value,TreeNode<T>* parent)
    {
        bool ret = true;
        GTreeNode<T>* node = new GTreeNode<T>();

        if(node != NULL)
        {
            node->value = value;
            node->parent = parent;

            insert(node);
        }
        else
        {
            //抛出异常
        }

        return ret;
    }

总结:

插入操作时构建树的唯一操作

-执行操作时必须指明结点间的父子关系

-插入操作必须正确处理指向父节点的指针

-插入数据元素时需要从堆空间中创建结点

猜你喜欢

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