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

来源:互联网 发布:linux nano编辑器 编辑:程序博客网 时间:2024/05/10 06:29
//Heighttemplate <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(算上根结点)}//Sizetemplate <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);}//Copytemplate <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;}//==  调用equaltemplate <class T>int operator==(const BinaryTree<T> &s,const BinaryTree<T> &t)          //公有函数,调用Equal,并传入两树的根结点{    return Equal(s.root,t.root)?true:false;}//Equaltemplate <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;}
//Parenttemplate <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);    }}


0 0
原创粉丝点击