{
public:
char ch
struct node 御销*l,*r
node(char c,node *lchild,node *rchild):ch(c),l(lchild),r(rchild){}
}
void space(int n)
{
for(int i=0 i<n i++)
cout << ' '
}
/* 以
*右子树笑渗
*根碰拆脊
*左子树
*的形式打印
*/
void print(node *T,int n)
{
if(!T)return
print(T->r, n+2)
space(n)
cout << T->ch << endl
print(T->l, n+2)
}
int main()
{
node *T = new node('A',
new node('B',NULL,NULL),
new node('C',
new node('D',NULL,NULL),
new node('E',NULL,NULL)))
print(T,0)
}
/*建议粘贴到编译器或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=0i<H-xi++) printf(" ")可能三个可能两个,试试
//for(i=0i<H-yi++) 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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)