您的位置:首页 > 运维架构

二叉树的创建--(4)Copy、Size、Height、Destroy、Equal、Parent

2016-04-20 09:58 363 查看
//Height
template <class T>
int BinaryTree<T>::Height(Node<T> *subtree)              //计算树的高度
{
if(subtree==NULL) return 0;
int i=Height(subtree->lchild);                                    //左子树高度
int j=Height(subtree->rchild);                                     //右子树高度
return (i>j)?i+1:j+1;                                             //树的高度等于左右子树高度较大值+1(算上根结点)
}

//Size
template <class T>
int BinaryTree<T>::Size(Node<T> *subtree)                             //计算树中结点个数
{
return 1+Size(subtree->lchild)+Size(subtree->rchild);             //根结点数1+左子树结点个数+右子树结点个数
}

//复制构造函数
template <class T>
BinaryTree<T>::BinaryTree(BinaryTree<T> &s)                                     //复制构造函数
{
root=Copy(s.root);
}

//Copy
template <class T>
Node<T>* BinaryTree<T>::Copy(Node<T> *orignode)                       //复制树
{
if(orignode==NULL) return NULL;
Node<T> *p=new Node<T>;
p->data=orignode->data;                                        //复制根结点
p->lchild=Copy(orignode->lchild);                              //复制左子树
p->rchild=Copy(orignode->rchild);                              //复制右子树

return p;
}

//==  调用equal
template <class T>
int operator==(const BinaryTree<T> &s,const BinaryTree<T> &t)          //公有函数,调用Equal,并传入两树的根结点
{
return Equal(s.root,t.root)?true:false;
}

//Equal
template <class T>
bool Equal(Node<T> *a,Node<T> *b)
{
if(a==NULL&&b==NULL) return true;
if(a!=NULL&&b!=NULL&&a->data==b->data&&Equal(a->lchild,b->lchild)&&Equal(a->rchild,b->rchild))
//如果a,b不为空,且a,b结点数据相等,且a,b左右子树相等,则返回真
return true;
else return false;
}
//Parent
template <class T>
Node<T>* BinaryTree<T>::Parent(Node<T> *subtree,Node<T> *current)             //从结点subtree开始搜索,搜索current的父结点并返回
{
Node<T> *p;
if(subtree==NULL)   return NULL;
if(subtree->lchild==current||subtree->rchild==current) return subtree;
else {
p=Parent(subtree->lchild,current);
if(p!=NULL) return p;
else return Parent(subtree->rchild,current);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: