#include using namespace std; typedef char TElemType; typedef struct TNode { TElemType data; TNode*parent,*fc,*ns; }FNode,*tree,*forest; typedef forest QElemType; typedef struct QNode { QElemType data; QNode *next; }*LQueuePtr; struct LQueue{ LQueuePtr front,rear;}; void QueueInit(LQueue &Q);//队初始化 void Enqueue(LQueue &Q,QElemType e);//入队 bool Dequeue(LQueue &Q,QElemType &e);//出队 void ForestLists(tree T); void TreeLists(tree T); void CreateForest(forest &T, char s[], int &i); void CreateForest(forest &T, char s[]); void ForestLevelOrder(forest F, void visit(TElemType));//森林的层序遍历输出 void visit(TElemType data); int main() { forest F; char s[]="BC#D##F##"; CreateForest(F,s); cout<<"该森林为:"<next=NULL; Q.rear=Q.front; } void Enqueue(LQueue &Q,QElemType e) { LQueuePtr p; p=new QNode;p->data=e;p->next=NULL; Q.rear->next=p;Q.rear=p; } bool Dequeue(LQueue &Q,QElemType &e) { LQueuePtr p; if(Q.front==Q.rear) return false; p=Q.front;Q.front=p->next;e=Q.front->data; delete p;return true; } void CreateForest(forest &T, char s[], int &i) { i++; if (s[i] == '#') { T = NULL; return; } T = new TNode; T->data = s[i]; //建立根节点 CreateForest(T->fc, s, i); CreateForest(T->ns, s, i); } void CreateForest(forest &T, char s[]) { int i = -1; CreateForest(T, s, i); } void TreeLists(tree T) { tree p; if (!T) { cout << "#"; return; } cout<data; p = T->fc; if (!p)return; cout << "("; while(p){ TreeLists(p); p = p->ns; if (p)cout << ","; } cout << ")"; } void ForestLists(tree T) { forest p = T; cout << "("; while (p) { TreeLists(p); p = p->ns; if (p)cout << ","; } cout << ")"; } void visit(TElemType data) { cout << data; } void ForestLevelOrder(forest F, void visit(TElemType)) { LQueue q;forest x,y; if(!F)return ; QueueInit(q); for (F; F; F = F->ns) { Enqueue(q,F); } while(Dequeue(q,x)) { visit(x->data); for(y=x->fc;y;y=y->ns) Enqueue(q,y); } }