正在加载图片...
(2)复制构造函数用另一棵表示为广义表的树初始化一棵树; GenTree : GenTree( const EntRee&r)i ∥共有函数 first= Copy ( tfirst ) GenTreeNode*GenTree: Copy GenTreeNode'ptr)( ∥私有函数,复制一个p指示的用广义表表示的子树 enTreenode*q= null; f (ptr I= NULL)t q= new GenTreeNode( pir->urpe, NULL); switch(ptr->utype) ∥根据结点类型mope传送值域 case 0:q-> Roorda=p-> rodata; break;w传送根结点数据 case:q-> Chilapa=p-> Childcare; break;传送子女结点数据 case2:q-> schild:=Copy(pr> firstChild); break;∥递归传送子树信息 g->nextSibling=Copy(ptr->nextSibling ) ∥复制同一层下一结点为头的表 (3) operator==()测试用广义表表示的两棵树是否相等 int operator==( GenTree& tl, EntRee& 2)i ∥友元函数:判两棵树n与ρ是否相等,若两表完全相等,函数返回1,否则返回0。 return Equal(tl, first, 22, first ) int Equal( Gen TreeNode * rl, GenTreeNode *2)i ∥是 Gentreenode的友元函数 f(rl==NULL&&(==NULl )return I ∥表n与表a都是空树,相等 if(nl l=NULL &&12 null & rl->urpe ==(->utype)( ∥两子树都非空且结点类型相同 switch(1l->utype)t ∥此较对应数据 case 0:x=(l-> rootdatc=12-> Rootdato)?1:0;∥根数据结点 case 1:x=(l-> Chiladata=1-> Chilapa)?1:0;∥女数据结点 e2:x=Equl(l-> firstchild,,a2-> firstchild);m递归比较其子树cin >> ch; } } (2) 复制构造函数 用另一棵表示为广义表的树初始化一棵树; GenTree :: GenTree ( const GenTree& t ) { //共有函数 first = Copy ( t.first ); } GenTreeNode* GenTree :: Copy ( GenTreeNode *ptr ) { //私有函数,复制一个 ptr 指示的用广义表表示的子树 GenTreeNode *q = NULL; if ( ptr != NULL ) { q = new GenTreeNode ( ptr->utype, NULL ); switch ( ptr->utype ) { //根据结点类型 utype 传送值域 case 0 : q->RootData = ptr->RootData; break; //传送根结点数据 case 1 : q->ChildData = ptr->ChildData; break; //传送子女结点数据 case 2 : q->firstChild = Copy ( ptr->firstChild ); break; //递归传送子树信息 } q->nextSibling = Copy ( ptr->nextSibling ); //复制同一层下一结点为头的表 } return q; } (3) operator == ( ) 测试用广义表表示的两棵树是否相等 int operator == ( GenTree& t1, GenTree& t2 ) { //友元函数 : 判两棵树 t1 与 t2 是否相等, 若两表完全相等, 函数返回 1, 否则返回 0。 return Equal ( t1.first, t2.first ); } int Equal ( GenTreeNode *t1, GenTreeNode *t2 ) { //是 GenTreeNode 的友元函数 int x; if ( t1 == NULL && t2 == NULL ) return 1; //表 t1 与表 t2 都是空树, 相等 if ( t1 != NULL && t2 != NULL && t1->utype == t2->utype ) { //两子树都非空且结点类型相同 switch ( t1->utype ) { //比较对应数据 case 0 : x = ( t1->RootData == t2->RootData ) ? 1 : 0; //根数据结点 break; case 1 : x = ( t1->ChildData == t2->ChildData ) ? 1 : 0; //子女数据结点 break; case 2 : x = Equal ( t1->firstChild, t2->firstChild ); //递归比较其子树 }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有