蓝桥杯算法笔记资料.pdf

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2016. 1.历届试题 横向打印⼆叉树   时间限制:1.0s 内存限制:256.0MB 问题描述 ⼆叉树可以⽤于排序。其原理很简单:对于⼀个排序⼆叉树添加新节 点时,先与根节点⽐较,若⼩则交给左⼦树继续处理,否则交给右⼦树。 当遇到空⼦树时,则把该节点放⼊那个位置。 ⽐如,10 8 5 7 12 4 的输⼊顺序,应该建成⼆叉树如下图所⽰,其中. 表⽰空⽩。 ...|-12 10-| ...|-8-| .......|...|-7 .......|-5-| ...........|-4 本题⽬要求:根据已知的数字,建⽴排序⼆叉树,并在标准输出中横 向打印该⼆叉树。 输⼊格式 输⼊数据为⼀⾏空格分开的N个整数。 N100,每个数字不超过 10000。 输⼊数据中没有重复的数字。 输出格式 输出该排序⼆叉树的横向表⽰。为了便于评卷程序⽐对空格的数⽬, 请把空格⽤句点代替: 样例输⼊1 10 5 20 样例输出1 ...|-20 10-| ...|-5 样例输⼊2 5 10 20 8 4 7 样例输出2 .......|-20 ..|-10-| ..|....|-8-| ..|........|-7 5-| ..|-4 ( ) #include iostream #include cstdio using namespace std; char G[110][450]={0}; int gp = 0; char buf[450]; int max_clen = 0; struct T { /* data */ T(): val(0),ltree(NULL),rtree(NULL) {} int val,c,len,no;/* , */ T *ltree,*rtree; //~T() { cout del val endl;} }; T* make(T* node, int val, int c) { if(node == NULL) { node = new T; node-c = c; node-len = sprintf(buf,%d,val); node-val = val; if(c+node-len max_clen) max_clen = c + node-len; } else { if(val node-val) node-ltree = make(node-ltree, val, c +3+node-len); else node-rtree = make(node-rtree, val, c +3+node-len); } return node; } void print(T* node) { if(node != NULL) cout node-val endl; if(node-ltree != NULL) print(node-ltree); if(node-rtree != NULL) print(node-rtree); } void hprint(T* node) { if(node-rtree != NULL) hprint(node-rtree); if(node != NULL) { //cout node-val - node-c endl; for(int i=0; inode-c; ++i) G[gp][i] = .; sprintf(G[gp]+node-c,%d,node-val); node-no = gp; ++gp; } if(node-ltree != NULL) hprint(node-ltree); } void linkTree(T* node) { if(node-rtree != NULL) { G[node-no][node-c+node-len] = -; for(int i=node-rtree-no; i=node-no; ++i) G[i][node-c+node-len+1] = |; G[node-rtree-no][node-c+node-len+2] = -; linkTree(node-rtree); } if(node != NULL) { } if(node-ltree != NULL) { G[node-no][node-c+node-len] = -; for(int i=node-no; i=node-ltree-no; ++i) G[i][node-c+node-len+1] = |; G[node-ltree-no][node-c+node-len+2] = -; linkTree(node-ltree); } } void printTree() { for(int i=0; ig

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档