二叉树的克隆操作
-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;
总结:
-比较操作判断两个二叉树中的数据元素是否对应相等
-克隆操作将当前二叉树在堆空间中进行复制
-相加操作将两颗二叉树中的数据元素在对应位置处相加
-相加操作的结果保存在堆空间的一棵二叉树中