数据结构 用C语言编写 打印二叉树 的实验 (完整的程序) 要求如下: 20
第一:设计一个按层次顺序(同一层次自左向右)遍历二叉树第二:将遍历结果显示在屏幕上结果的样子比如:ABCDE,怎么输入运行结果最好说清楚点,小弟刚接触数据结构,很多问题都...
第一:设计一个按层次顺序(同一层次自左向右)遍历二叉树
第二:将遍历结果显示在屏幕上
结果的样子比如:A
B C
D E ,怎么输入运行结果最好说清楚点 ,小弟刚接触数据结构,很多问题都不会,各位大侠们帮帮忙,现在这里谢谢你们了!!!! 展开
第二:将遍历结果显示在屏幕上
结果的样子比如:A
B C
D E ,怎么输入运行结果最好说清楚点 ,小弟刚接触数据结构,很多问题都不会,各位大侠们帮帮忙,现在这里谢谢你们了!!!! 展开
展开全部
/*建议粘贴到编译器或gvim中看,效果会好很多*/
/*广度优先,很基础的东东*/
/*我的话很罗嗦,忍耐……*/
#include <cstdio>
#define MAX_SIZE 1000
/*注释出错的话就把注释删掉再编译*/
/*********关于二叉树的结构**********/
/**我这里就不用指针来存储了*********/
/**以一个数组的形式来弄*************/
/***********************************/
/****************a[0]***************/
/********a[1]************a[2]*******/
/*****a[3]**a[4]*****a[5]******a[6]*/
/***********************************/
/***也就是说a[i]的儿子是a[i*2+1]****/
/***和a[i*2+2]**********************/
/***********************************/
/***这种结构可能会浪费很多空间******/
/***不过对于这道题我觉得无所谓了吧**/
/***********************************/
/***没有儿子的填-1 或者是其他的*****/
/***有儿子的填数字或字符************/
/***********************************/
/*这是队列*/
int queue[MAX_SIZE];//这是队的存储单位
int head = 0;//这是脑袋
int tail = 0;//这是尾巴
int main()
{
char tree[MAX_SIZE];//也可以用int神马的,输出的时候用%c就可以了,
char temp, old;//temp临时节点,
//...输入就自己写吧…一个while循环,当读到截止符时停止,比如-2,别忘了记录最后一个的位置
//其实这种读入方式直接输出字符串就能得到结果了,但是还是按照广度优先的方法写一下吧
queue[tail++] = 0;//把根节点压入队列, 写个标号就可以了
//用log(tree的最后一个儿子的位置) ÷log(2) 等于书的高度H
while(head != tail)//head == tail时就意味着队列空了,等价于queue.IsEmpty()
{
temp = queue[head++];//出队
//...输出temp吧,这个似乎与数据结构木有任何关系,log(temp+1)÷log(2) 得到temp节点在第几层这里设为x, temp - 2 ^ 层数,得到了该层得第几个,设为y
//每个占三个空格位置,左右用来间隔,中间用来写字
//for(i=0; i<H-x; i++) printf(" ");可能三个可能两个,试试;
//for(i=0; i<H-y; i++) printf(" ");可能三个可能两个,试试;
//输出tree[temp]吧
//回车神马时候输……呃……我有时间再看弄吧
//所有儿子入队
if(tree[temp*2+1] != -1 )//如果有儿子
queue[tail++] = temp*2+1;//压的是角标不是内容
if(tree[temp*2+2] != -1)
queue[tail++] = temp*2+2;//压的是角标不是内容
}
return 0;
}
/*广度优先,很基础的东东*/
/*我的话很罗嗦,忍耐……*/
#include <cstdio>
#define MAX_SIZE 1000
/*注释出错的话就把注释删掉再编译*/
/*********关于二叉树的结构**********/
/**我这里就不用指针来存储了*********/
/**以一个数组的形式来弄*************/
/***********************************/
/****************a[0]***************/
/********a[1]************a[2]*******/
/*****a[3]**a[4]*****a[5]******a[6]*/
/***********************************/
/***也就是说a[i]的儿子是a[i*2+1]****/
/***和a[i*2+2]**********************/
/***********************************/
/***这种结构可能会浪费很多空间******/
/***不过对于这道题我觉得无所谓了吧**/
/***********************************/
/***没有儿子的填-1 或者是其他的*****/
/***有儿子的填数字或字符************/
/***********************************/
/*这是队列*/
int queue[MAX_SIZE];//这是队的存储单位
int head = 0;//这是脑袋
int tail = 0;//这是尾巴
int main()
{
char tree[MAX_SIZE];//也可以用int神马的,输出的时候用%c就可以了,
char temp, old;//temp临时节点,
//...输入就自己写吧…一个while循环,当读到截止符时停止,比如-2,别忘了记录最后一个的位置
//其实这种读入方式直接输出字符串就能得到结果了,但是还是按照广度优先的方法写一下吧
queue[tail++] = 0;//把根节点压入队列, 写个标号就可以了
//用log(tree的最后一个儿子的位置) ÷log(2) 等于书的高度H
while(head != tail)//head == tail时就意味着队列空了,等价于queue.IsEmpty()
{
temp = queue[head++];//出队
//...输出temp吧,这个似乎与数据结构木有任何关系,log(temp+1)÷log(2) 得到temp节点在第几层这里设为x, temp - 2 ^ 层数,得到了该层得第几个,设为y
//每个占三个空格位置,左右用来间隔,中间用来写字
//for(i=0; i<H-x; i++) printf(" ");可能三个可能两个,试试;
//for(i=0; i<H-y; i++) printf(" ");可能三个可能两个,试试;
//输出tree[temp]吧
//回车神马时候输……呃……我有时间再看弄吧
//所有儿子入队
if(tree[temp*2+1] != -1 )//如果有儿子
queue[tail++] = temp*2+1;//压的是角标不是内容
if(tree[temp*2+2] != -1)
queue[tail++] = temp*2+2;//压的是角标不是内容
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询