加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

二叉树的三种遍历及树形打印  C语言编程

(2008-12-13 20:16:57)
标签:

if

二叉树

to

zuo

it

分类: 数据结构C语言版编程实例

用二叉链表存储二叉树,实现二叉树的先序、中序以及后序遍历,并在图形模式下打印树形

#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<conio.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define NULL 0
typedef int Status;
typedef char TElemType;
typedef struct BiTNode{
 TElemType data;
 struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree *T)
{ char data;
  scanf("%c",&data);
  if(data=='#') *T=NULL;
  else {
 *T=(BiTree)malloc(sizeof(BiTNode));
 if(!(*T)) exit(OVERFLOW);
 (*T)->data=data;
 CreateBiTree(&(*T)->lchild);
 CreateBiTree(&(*T)->rchild);
       }
    return OK;
}
Status PreOrderTraverse(BiTree T)
if(T) { printf("%c",T->data);
           PreOrderTraverse(T->lchild);
           PreOrderTraverse(T->rchild);
          return OK;
         }
    return ERROR;
}
Status InOrderTraverse(BiTree T)
if(T) {
    InOrderTraverse(T->lchild);
           printf("%c",T->data);
    InOrderTraverse(T->rchild);
          return OK;
         }
   return ERROR;
}
Status PostOrderTraverse(BiTree T)
if(T) {
           PostOrderTraverse(T->lchild);

           PostOrderTraverse(T->rchild);
           printf("%c",T->data);
           return OK;
         }
   return ERROR;
}
Status DestroyBiTree(BiTree *T)
if((*T)->data==NULL)return ERROR;
   free(*T);
   *T=NULL;
   return OK;
}
void Paint(BiTree T,int x,int y,int g)
{ char c[2];
  int you=0,zuo=0;
  if(T)
  {setcolor(WHITE);
   circle(x,y,10);
   c[0]=T->data;
   c[1]='\0';
   outtextxy(x,y,c);
   if(T->lchild!=NULL)
   {if(x>g) zuo=(x-g)/2+g;
    if(x<g) zuo=(x-g)/2+x;
    line(x-1,y,zuo,y+80);
   }
   if(T->rchild!=NULL)
   {you=2*x-zuo;
   line(x-1,y,you,y+80);
   }
   Paint(T->lchild,zuo,y+80,x);
   Paint(T->rchild,you,y+80,x);
  }
  
}
main()
{ BiTree T;  int x,y,g;
int gdriver,gmode;
x=320;y=30;g=0;
gdriver=DETECT;

printf("input the BiTree's data(in PreOrder and <=63ge ):\n");              //创建

if(!CreateBiTree(&T))printf("kongjian OVERFLOW! can not create!\n");
else printf("cunchu success!\n");
printf("press any key to contunue:\n");
getch();

printf("PreOrder's visit:\n");                  //先序遍历
if(!PreOrderTraverse(T)) printf("PreOrder visit ERROR!\n");
printf("\n press any key to continue:\n");
getch();

printf("InOrder's visit:\n");              //中序遍历
if(!InOrderTraverse(T)) printf("InOrder visit ERROR!\n");
printf("\n press any key to continue:\n");
getch();

printf("PostOrder's visit:\n");            //后序遍历
if(!PostOrderTraverse(T)) printf("PostOrder visit ERROR!\n");
printf("\n press any key to continue:\n");
getch();
                                                                //打印树形
printf("now,print the BiTree like a tree:\n");
printf("press any key to see the tree:\n");
getch();
initgraph(&gdriver,&gmode,"C:\\TC");
setbkcolor(BLUE);
cleardevice();
Paint(T,x,y,g);
getch();
closegraph();
printf("press any key to continue:\n");
getch();

if(DestroyBiTree(&T))printf("the BiTree destroyed!\n");      //销毁树
else printf("NULL!can not destroy!\n");
printf("press any key to continue:\n");          //结束程序
getch();
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有