1. 程式人生 > >資料結構 筆記:二叉樹的比較與相加

資料結構 筆記:二叉樹的比較與相加

二叉樹的克隆操作

-SharedPointer<BTree<T>> clone() const

·克隆當前樹的一份拷貝

·返回值為堆空間中的一棵新二叉樹(與當前樹相等)

二叉樹的克隆

-定義功能:clone(node)

·拷貝node為根節點的二叉樹(資料元素在對應位置相等)

BTreeNode<T>* clone(BTreeNode<T>* node) const
    {
        BTreeNode<T>* ret = NULL;
        if(node != NULL)
        {
            ret = BTreeNode<T>::NewNode();

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

                ret->left = clone(node->left);
                ret->right = clone(node->right);

                if(ret->left != NULL)
                {
                    ret->left->parent = ret;
                }

                if(ret->right != NULL)
                {
                    ret->right->parent = ret;
                }
            }
            else
            {
                //丟擲異常
            }
        }
        return ret;
    }

二叉樹比較操作的定義

-判斷兩顆二叉樹中的資料元素是否對應相等

·bool operator == (const BTree<T>& btree)

·bool operator != (const BTree<T>& btree)

二叉樹的比較

-定義功能:equal(lh,rh)

·判斷lh為根節點的二叉樹與rh為根節點的二叉樹是否相等

二叉樹的相加操作

SharedPointer<BTree<T>> add(const BTree<T>& btree) const

·將當前二叉樹與引數btree中的資料元素在對應位置處相加

·返回值(相加的結果)為堆空間中的一棵新二叉樹

二叉樹的加法

-定義功能:add(lh,rh)

·將lh為根節點的二叉樹與rh為根結點的二叉樹相加

BTreeNode<T>* add(BTreeNode<T>* lh,BTreeNode<T>* rh)const
    {
        BTreeNode<T>* ret = NULL;

        if((lh == NULL) && (rh != NULL))
        {
            ret = clone(rh);
        }
        else if((lh != NULL) && (rh == NULL))
        {
            ret = clone(lh);
        }
        else if((lh != NULL) && (rh != NULL))
        {
            ret = BTreeNode<T>::NewNode();

            if(ret != NULL)
            {
                ret->value = lh->value + rh->value;

                ret->left = add(lh->left,rh->left);
                ret->right = add(lh->right,rh->right);

                if(ret->left != NULL)
                {
                    ret->left->parent = ret;
                }

                if(ret->right != NULL)
                {
                    ret->right->parent = ret;
                }
            }
            else
            {
                //丟擲異常
            }
        }

        return ret;

總結:

-比較操作判斷兩個二叉樹中的資料元素是否對應相等

-克隆操作將當前二叉樹在堆空間中進行復制

-相加操作將兩顆二叉樹中的資料元素在對應位置處相加

-相加操作的結果儲存在堆空間的一棵二叉樹中