1. 程式人生 > >資料結構 筆記:樹中結點的插入操作

資料結構 筆記:樹中結點的插入操作

插入的方式

-插入新結點

·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;
    }

總結:

插入操作時構建樹的唯一操作

-執行操作時必須指明結點間的父子關係

-插入操作必須正確處理指向父節點的指標

-插入資料元素時需要從堆空間中建立結點