数据结构5

来源:互联网 发布:tensorflow安装在哪里 编辑:程序博客网 时间:2024/04/29 14:26

呃 。。。心情不好。。。


实验五


建立一个含有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没有控制好 ,懒得改了,桑心了。。。

原创粉丝点击