正在加载图片...
if(x)ret ibling, 22->nextSibling ) ∥相等,递归比较同一层的下一个结点;不等,不再递归比较 (4) operator<<()用广义表的形式输出一棵树 ostream& operator << ostream& out, Gen Tree& 1)t ∥友元函数,将树t输出到输出流对象 L traverse( out return our: void GenTree : traverse( ostream& out, GenTreeNode'pir)i ∥私有函数,广义树的遍历算法 if(ptr->urpe=0)out < ptr->RootData <<'C; ∥根数据结点 ∥子女数据结点 if(ptr-> nextSibling=NULL)oa<<∵,’; traverse( ptr->firstChild); 的向子树方向搜索 if( ptr->nexzSibling = NULL)out traverse( ptr->next Sibling ) ∥向同一层下一兄弟搜索 Ise out <<')i (5)析构函数清除一棵用广义表表示的树 Entree∷~ EntRee(){ ∥用广义表表示的树的析构函数,假定fst≠NULL void GenTree : Remove( GenTreeNode "pir)( while(ptr I= NULL)( p=ptr->nexzSibling: ∥在子树中删除 ptr->nextSibling=p->nexrSibling: delete(P);if ( x ) return Equal ( t1->nextSibling, t2->nextSibling ); //相等, 递归比较同一层的下一个结点; 不等, 不再递归比较 } return 0; } (4) operator << ( ) 用广义表的形式输出一棵树 ostream& operator << ( ostream& out, GenTree& t ) { //友元函数, 将树 t 输出到输出流对象 out。 t.traverse ( out, t.first ); return out; } void GenTree :: traverse ( ostream& out, GenTreeNode * ptr ) { //私有函数, 广义树的遍历算法 if ( ptr != NULL ) { if ( ptr->utype == 0 ) out << ptr->RootData << ‘(’; //根数据结点 else if ( ptr->utype == 1 ) { //子女数据结点 out << ptr->ChildData; if ( ptr->nextSibling != NULL ) out << ‘,’; } else { //子树结点 traverse ( ptr->firstChild ); //向子树方向搜索 if ( ptr->nextSibling != NULL ) out << ‘,’; } traverse ( ptr->nextSibling ); //向同一层下一兄弟搜索 } else out << ‘)’; } (5) 析构函数 清除一棵用广义表表示的树 GenTree :: ~ GenTree ( ) { //用广义表表示的树的析构函数, 假定 first ≠ NULL Remove ( first ); } void GenTree :: Remove ( GenTreeNode *ptr ) { GenTreeNode * p; while ( ptr != NULL ) { p = ptr->nextSibling; if ( p->utype == 2 ) Remove ( p->firstChild ); //在子树中删除 ptr->nextSibling = p->nextSibling; delete ( p ); //释放结点 p }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有