2013贵州省java版本高级 .pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

1、由二叉树的前序遍历和中序遍历序列能确定唯一的一棵二叉树,下面程序的作用是实现由

已知某二叉树的前序遍历和中序遍历序列,生成一棵用二叉链表表示的二叉树并打印出后序

遍历序列,请写出程序所缺的语句。

#defineMAX100

typedefstructNode

{charinfo;structNode*llink,*rlink;}TNODE;

charpred[MAX],inod[MAX];

main(intargc,int**argv)

{TNODE*root;

if(argc3)exit0;

strcpy(pred,argv[1]);strcpy(inod,argv[2]);

root=restore(pred,inod,strlen(pred));

postorder(root);

}

TNODE*restore(char*ppos,char*ipos,intn)

{TNODE*ptr;char*rpos;intk;

if(n=0)returnNULL;

ptr-info=(1)_______;

for((2)_______;rposipos+n;rpos++)if(*rpos==*ppos)break;

k=(3)_______;

ptr-llink=restore(ppos+1,(4)_______,k);

ptr-rlink=restore((5)_______+k,rpos+1,n-1-k);

returnptr;

}

postorder(TNODE*ptr)

{if(ptr=NULL)return;

postorder(ptr-llink);postorder(ptr-rlink);printf(“%c”,ptr-info);

}

2、连通图的生成树包括图中的全部n个顶点和足以使图连通的n-1条边,最小生成树是边上

权值之和最小的生成树。故可按权值从大到小对边进行排序,然后从大到小将边删除。每删

除一条当前权值最大的边后,就去测试图是否仍连通,若不再连通,则将该边恢复。若仍连

通,继续向下删;直到剩n-1条边为止。

voidSpnTree(AdjListg)

//用“破圈法”求解带权连通无向图的一棵最小代价生成树。

{typedefstruct{inti,j,w}node;//设顶点信息就是顶点编号,权是整型数

nodeedge[];

scanf(%d%d,e,n);//输入边数和顶点数。

for(i=1;i=e;i++)//输入e条边:顶点,权值。

scanf(%d%d%d,edge[i].i,edge[i].j,edge[i].w);

for(i=2;i=e;i++)//按边上的权值大小,对边进行逆序排序。

{edge[0]=edge[i];j=i-1;

while(edge[j].wedge[0].w)edge[j+1]=edge[j--];

edge[j+1]=edge[0];}//for

k=1;eg=e;

while(eg=n)//破圈,直到边数e=n-1.

{if(connect(k))//删除第k条边若仍连通。

{edge[k].w=0;eg--;}//测试下一条边edge[k],权值置0表示该边被删除

k++;//下条边

}//while

}//算法结束。

connect()是测试图是否连通的函数,可用图的遍历实现,

3、数组A和B的元素分别有序,欲将两数组合并到C数组,使C仍有序,应将A和B拷贝到

C,只要注意A和B数组指针的使用,以及正确处理一数组读完数据后将另一数组余下元素复

制到C中即可。

voidunion(intA[],B[],C[],m,n)

//整型数组A和B各有m和n个元素,前者递增有序,后者递减有序,本算法将A和B归并

为递增有序的数组C。

{i=0;j=n-1;k=0;//i,j,k分别是数组A,B和C的下标,因用C描述,下标从0开始

while(imj=0)

if(a[i]b[j])c[k++]=a[i++]elsec[k++]=b[j--];

wh

您可能关注的文档

文档评论(0)

135****5548 + 关注
官方认证
内容提供者

各类考试卷、真题卷

认证主体社旗县兴中文具店(个体工商户)
IP属地河南
统一社会信用代码/组织机构代码
92411327MAD627N96D

1亿VIP精品文档

相关文档