#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; }