#include <iostream> using namespace std; typedef struct CSNode { char data; struct CSNode * firstchild , * nextsibling ; }* CSTree; //==================================================== #define MAXSIZE 10 CSTree q[MAXSIZE]; int count=0; //初始化 void init_cstree(CSTree &tree) { tree->firstchild = NULL; tree->nextsibling = NULL; } //创建树 void creat_cstree(CSTree &T) { FILE *fin=fopen("树的孩子兄弟表示法.txt","r"); char fa=' ',ch=' '; for( fscanf(fin,"%c%c",&fa,&ch); ch!='#'; fscanf(fin,"%c%c",&fa,&ch) ) { CSTree p=(CSTree)malloc(sizeof(CSTree)); init_cstree(p); p->data=ch; q[++count]=p; if('#' == fa) T=p; else { CSTree s = (CSTree)malloc(sizeof(CSTree)); int i; for(i=1;i<=MAXSIZE;i++) { if(q[i]->data == fa) { s=q[i]; break; } } if(! (s->firstchild) ) //如果该双亲结点还没有接孩子节点 s->firstchild=p; else //如果该双亲结点已经接了孩子节点 { CSTree temp=s->firstchild; while(NULL != temp->nextsibling) { temp=temp->nextsibling; } temp->nextsibling=p; } } } fclose(fin); } //前序遍历 void print_cstree(CSTree &tree) { cout<<tree->data<<" "; if(tree->firstchild!=NULL) print_cstree(tree->firstchild); if(tree->nextsibling!=NULL) print_cstree(tree->nextsibling); } //输出树中所有从根到叶子结点的路径的算法 //void allpath_tree() int main() { CSTree cstree; cstree=(CSTree)malloc(sizeof(CSTree)); init_cstree(cstree); creat_cstree(cstree); //输出树 print_cstree(cstree); cout<<endl; return 0; }