数据结构 笔记:二叉树的比较与相加

二叉树的克隆操作

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

总结:

-比较操作判断两个二叉树中的数据元素是否对应相等

-克隆操作将当前二叉树在堆空间中进行复制

-相加操作将两颗二叉树中的数据元素在对应位置处相加

-相加操作的结果保存在堆空间的一棵二叉树中

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值