以孩子兄弟链表作为存储结构-求树中节点x的第i个孩子.docVIP

以孩子兄弟链表作为存储结构-求树中节点x的第i个孩子.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

#includestdio.h

#includestdlib.h

#definemax20

typedefstructnode{

chardata;

node*child,*brother;

}Tree;

Tree*Q1[max];//用于记录父结点

Tree*Q2[max];//用于记录兄弟结点

intfront1=0,rear1=-1,front2=0,rear2=-1;

Tree*Creatree(){//创立以孩子兄弟链表为存储结构的树

Tree*T,*S;

charpa,ch;

intsign=0;

T=NULL;

printf(建立树,请输入结点信息及其父结点信息:\n);

scanf(%c%c,ch,pa);

while(ch!=#){

intstop=1;

S=(Tree*)malloc(sizeof(Tree));

S-data=ch;

S-child=S-brother=NULL;

rear1++;

Q1[rear1]=S;

if(pa!=@){//父结点不为空

rear2++;

Q2[rear2]=S;

while(stop){

if(pa==Q1[front1]-datasign==0){

Q1[front1]-child=S;

sign=1;

stop=0;

}

elseif(pa==Q1[front1]-datasign!=0){

Q2[front2]-brother=S;

front2++;

stop=0;

}

else{

front1++;

if(Q2[front2]-data!=ch)

front2++;

sign=0;

}

}

scanf(%c%c,ch,pa);

}

else{//父结点为空

T=Q1[front1];

scanf(%c%c,ch,pa);

}

}

returnT;

}

Tree*WHOLE=NULL;//设置全局变量,来存储树中与结点x值相等的结点

voidSeek_root(Tree*T,Tree*x){//在树中查找与结点x值相等的结点

if(T!=NULL){

if(T-data==x-data)

WHOLE=T;

else{

Seek_root(T-child,x);

Seek_root(T-brother,x);

}

}

}

Tree*Search_child(Tree*T,Tree*x,inti){//查找结点x的第i个孩子

Tree*p,*q;

intmark=1;

Seek_root(T,x);

if(WHOLE==NULL)//结点x没有第i个孩子

q=WHOLE;

else{//结点x有第i个孩子

q=WHOLE-child;

while(mark!=i){

q=q-brother;

mark++;

}

}

returnq;

}

voidmain(){

Tree*T,*x,*s;

inti;

charch;

T=Creatree();

printf(请输入x与i(结点x的第i个孩子):\n);

scanf(%c%d,ch,i);

x=(Tree*)malloc(sizeof(Tree));

x-data=ch;

x-child=x-brother=NULL;

s=Search_child(T,x,i);

if(s!=NULL)

printf(结点%c的第%d个孩子是%c!\n,ch,i,s-data);

else

printf(结点%c没有第%d个孩子!\n,ch,i);

}

文档评论(0)

199****8042 + 关注
实名认证
文档贡献者

相信自己,相信明天

1亿VIP精品文档

相关文档