呃 。。。心情不好。。。
实验五
建立一个含有10个节点的二叉树,并以直观的形式输出该二叉树,同时要求对该树进行层次遍历,输出该树的深度。
建树神马的,想想暑假用的线段树,凑合凑合吧,不过还是自己用递归重新写了写。。。
这个实验最恶心的地方是以直观的形式输出二叉树。。。蛋疼了。。。
//由于编辑框显示一排最多只有80个字符
//若是用二叉树的形式表示,以2^n记
//要正常显示的话,可以建深度为5的二叉树
//因为要保证第一个接近中间<=40即为2^5<40
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#define max(a,b) (a>b?a:b)
using namespace std;
typedef struct node
{
char data;
struct node *l,*r;
}*Bitree;
Bitree build()
{
char ch;
scanf("%c",&ch);
getchar();
if(ch=='#')
return NULL;
Bitree tree=new node;
tree->data=ch;
tree->l=build();
tree->r=build();
return tree;
}
void preorder(Bitree tree)
{
if(tree)
{
printf("%c ",tree->data);
preorder(tree->l);
preorder(tree->r);
}
}
void inorder(Bitree tree)
{
if(tree)
{
inorder(tree->l);
printf("%c ",tree->data);
inorder(tree->r);
}
}
void postorder(Bitree tree)
{
if(tree)
{
postorder(tree->l);
postorder(tree->r);
printf("%c ",tree->data);
}
}
int Treedepth(Bitree tree)
{
int num=0;
if(tree)
num=max(Treedepth(tree->l),Treedepth(tree->r))+1;
return num;
}
char tag[100][100];
int miao;
int wu=0;
int deep;
void cengci(Bitree tree,int miao,int wu,int q)
{
if(tree)
{
if(q==0)
{
miao=pow(2.0,deep);
tag[++wu][miao]=tree->data;
int ww=wu,uu=wu,mm=miao,nn=miao;
deep--;
cengci(tree->l,mm,ww,-1);
deep++;
cengci(tree->r,nn,uu,1);
}
else if(q==-1)
{
miao-=pow(2.0,deep);
tag[++wu][miao]=tree->data;
int ww=wu,uu=wu,mm=miao,nn=miao;
deep--;
cengci(tree->l,mm,ww,-1);
cengci(tree->r,nn,uu,1);
deep++;
}
else if(q==1)
{
miao+=pow(2.0,deep)+1;
tag[++wu][miao]=tree->data;
int ww=wu,uu=wu,mm=miao,nn=miao;
deep--;
cengci(tree->l,mm,ww,-1);
cengci(tree->r,nn,uu,1);
}
}
}
int main()
{
memset(tag,0,sizeof(tag));
Bitree tree=build();
deep=Treedepth(tree);
printf("\nDepth: %d\n",deep);
printf("\n先序遍历:\n");
preorder(tree);
printf("\n中序遍历:\n");
inorder(tree);
printf("\n后序遍历:\n");
postorder(tree);
printf("\n层次遍历:\n");
cengci(tree,miao,wu,0);
for(int i=0;i<=10;i++)
{for(int j=0;j<=64;j++)
{
if(tag[i][j])
printf("%c",tag[i][j]);
else
printf(" ");
}
printf("\n");
}
return 0;
}
先试试了几个样例发现暂时没问题。。。。
看上去还凑合吧,但是我试了一个满二叉树,结果发现间距什么的问题都出来了,估计是递归里面的deep没有控制好 ,懒得改了,桑心了。。。