树结点练习2

#include "stdafx.h"
#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,tj;
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;tj.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;
}

 

posted on 2016-04-21 18:40  说变就变  阅读(138)  评论(1编辑  收藏  举报