1. 编程题:定义树的孩子兄弟表示法的存储结构,并实现如下图树的存储,并在主函数中验证。(运行结果截图)

#include "stdio.h"

typedef char DataType ;

typedef struct Node{

DataType data;

struct Node *firstchild, *nextsibling;

}CSTypeNode, *CSTypeTree;

 

CSTypeNode *tp;

int flag=0;

void GetTree(CSTypeNode *t,char x){//根据结点x,输出其父节点与子结点

  CSTypeNode *p;

      if(t==NULL) return ; 

  if(flag==1) return ;

       p=t->firstchild;

   if(p!=NULL &&flag!=2){ //父结点已找到,就不用再找

          do{//寻找其父结点

      if(p->data==x){

       flag=2;//设置父结点已找到标志

   printf("此结点%c的父结点为%c\n",x,t->data);                 

   break;

  }

      p=p->nextsibling;

  }while(p!=NULL);

   }

      

   if(t->data==x){//找到此结点否

        flag=1;//是,设置已找到标志

if(t==tp)

  printf("此结点%c为根结点\n",x); 

 if(t->firstchild==NULL)

     printf("此结点%c无子结点\n",x);

     else {

     printf("此结点%c的子结点为",x);

     p=t->firstchild;

                  do{//循环获取其子结点

                       printf("%c ",p->data);

           p=p->nextsibling;

  }while(p!=NULL);

      printf("\n");

   }

   }

  GetTree(t->nextsibling,x);//递归寻找右子结点  

  GetTree(t->firstchild,x); //递归寻找左子结点    

   return ;

}

void Tree2Link(CSTypeNode *t,char x)

{

   flag=0;

   tp=t;

   GetTree(t,x);

   if(flag==0)

   printf("无此结点%c数据\n",x);

   printf("\n");

}

int main(int argc, char* argv[])

{   printf("学号姓名  树的孩子兄弟结点表示\n");

    CSTypeNode ta,tb,tc,td,te,tf,tg,ti,th;

ta.data='A';tb.data='B';

tc.data='C';td.data='D';

te.data='E';tf.data='F';

tg.data='G';th.data='H';

ti.data='I';tj.data='J';

    

ta.firstchild=&tb;ta.nextsibling=NULL;

tb.firstchild=&td;tb.nextsibling=&tc;

tc.firstchild=&th;tc.nextsibling=NULL;

td.firstchild=NULL;td.nextsibling=&tg;

te.firstchild=NULL;te.nextsibling=&tf;

tf.firstchild=NULL;tf.nextsibling=&ti;

tg.firstchild=&te;tg.nextsibling=NULL;

th.firstchild=NULL;th.nextsibling=&tJ;

ti.firstchild=NULL;ti.nextsibling=NULL;

tj.firstchild=NULL;ti.nextsibling=NULL;

    char c[20];

while(true){

    printf("输入结点数据:");

    scanf("%s",c);

if(c[0]=='0') break;

//if(c=='\n') continue;

        Tree2Link(&ta,c[0]);

}

return 0;

}