- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)