📄 c.txt
字号:
画二叉树_图形编程_
#include<malloc.h>
#include<limits.h>
#include<stdio.h>
#include<graphics.h>
#include<io.h>
#include<math.h>
#include<process.h>
#include<conio.h>
#define m 100
#define OK 1
typedef int Status;
typedef char TElemType;/*树元素的类型*/
int t=35;
int n=20;
int h=14;
int u=2;
int leaf=0,non_l_leaf=0,non_r_leaf=0,root=0;/*各种结点数*/
char le[m],l[m],r[m],ro[m];/*用与存放各种结点*/
typedef struct BiTNode/*定义二叉树*/
{
TElemType data;
int x;
int y;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTree;
Status CreateBiTree(BiTree **T,int a,int b)/*先序非递归建立二叉树*/
{
TElemType ch;
scanf("\n%c",&ch);
if(ch=='0')/*用'0'表示结点为空*/
{(*T)=NULL;}
else
{ *T=(BiTree *)malloc(sizeof(BiTree));
if(!T)
exit(OVERFLOW);
(*T)->data=ch;
(*T)->x=a;(*T)->y=b;
CreateBiTree(&((*T)->lchild),a-t,b t);
CreateBiTree(&((*T)->rchild),a t,b t);
}
return OK;
}
void InOrderTraverse(BiTree *T,Status (*Visit)(TElemType))/*中序递归遍历二叉树*/
{
if(T)
{
InOrderTraverse(T->lchild,Visit);
Visit(T->data);
InOrderTraverse(T->rchild,Visit);
}
}
void PreOrderTraverse(BiTree *T,Status (*Visit)(TElemType))/*先序递归遍历二叉树*/
{
if(T)
{
Visit(T->data);
PreOrderTraverse(T->lchild,Visit);
PreOrderTraverse(T->rchild,Visit);
}
}
void PostOrderTraverse(BiTree *T,Status (*Visit)(TElemType))/*后序递归遍历二叉树*/
{
if(T)
{
PreOrderTraverse(T->lchild,Visit);
PreOrderTraverse(T->rchild,Visit);
Visit(T->data);
}
}
Status vi(TElemType e)/*输出树的元素*/
{
printf("%c ",e);
return OK;
}
void PreOrderTraverse1(BiTree *T,int go_l)/*把树根结点的左、右子树分别左、右移(以防结点重复)*/
{
if(T)
{
if(go_l==0) T->x =h;
else T->x-=h;
PreOrderTraverse1(T->lchild,go_l);
PreOrderTraverse1(T->rchild,go_l);
}
}
void PreOrderTraverse2(BiTree *T)/*递归的先序的、画树的结构*/
{
TElemType str[3];
if(T)
{
sprintf(str,"%c",T->data);
setcolor(LIGHTMAGENTA);/*设置圆的颜色*/
circle(T->x,T->y,n/2);/*画圆*/
setcolor(RED);
outtextxy((T->x)-u,(T->y)-u,str);/*在圆内输出结点*/
if(T->lchild!=NULL)
{
setcolor(LIGHTGREEN);/*设置线的颜色*/
line(T->x,T->y n/2,T->lchild->x,T->lchild->y-n/2);/*画线*/
}
if(T->rchild!=NULL)
{
setcolor(LIGHTGREEN);/*设置线的颜色*/
line(T->x,T->y n/2,T->rchild->x,T->rchild->y-n/2);/*画线*/
}
PreOrderTraverse2(T->lchild);
PreOrderTraverse2(T->rchild);
}
}
void PreOrderTraverse3(BiTree *T)/*计算各种结点的个数,统计各种结点*/
{
if(T)
{
if(!T->lchild&&!T->rchild)
{
le[leaf]=T->data;
leaf ;
}
if(T->lchild&&!T->rchild)
{
r[non_r_leaf]=T->data;
non_r_leaf ;
}
if(!T->lchild&&T->rchild)
{
l[non_l_leaf]=T->data;
non_l_leaf ;
}
if(T->lchild&&T->rchild)
{
ro[root]=T->data;
root ;
}
PreOrderTraverse3(T->lchild);
PreOrderTraverse3(T->rchild);
}
}
void print(char d[],int t)/*输出数组d元素*/
{
int i;
for(i=0;i<t;i )
printf("%c ",d);
printf("\n");
}
void print1()/*输出各种结点,以及其的数目*/
{
printf("\nThe number of leafs is:%d\n",leaf);/*叶子结点*/
if(leaf>0)
{
if(leaf>1)
printf(" Them are:");
else
printf(" It is:");
print(le,leaf);
}
printf("The number of tree which only has letf child:%d\n",non_r_leaf);/*只有右子树的结点*/
if(non_r_leaf>0)
{
if(non_r_leaf>1)
printf(" Them are:");
else
printf(" It is:");
print(r,non_r_leaf);
}
printf("The number of tree which only has right child:%d\n",non_l_leaf);/*只有左子树的结点*/
if(non_l_leaf>0)
{
if(non_l_leaf>1)
printf(" Them are:");
else
printf(" It is:");
print(l,non_l_leaf);
}
printf("The number of tree which not only has right child but also has left child:%d\n",root);
/*既有右子树又有左子树的结点*/
if(root>0)
{
if(root>1)
printf(" Them are:");
else
printf(" It is:");
print(ro,root);
}
}
void main()/*主函数*/
{
int graphdriver,graphmode;
int i,j;
BiTree *a='\0';
graphdriver=DETECT;
initgraph(&graphdriver,&graphmode,"C:\TC");/*初始化图象设备*/
cleardevice();/*清屏*/
setbkcolor(BROWN);/*设置背景颜色*/
printf("PreOrderTraverse Input tree:\n");
CreateBiTree(&a,300,40);/*建立二叉树*/
if(a->lchild!=NULL)/*将根的左子树左移*/
PreOrderTraverse1(a->lchild,1);
if(a->rchild!=NULL)/*将根的右子树右移*/
PreOrderTraverse1(a->rchild,0);
PreOrderTraverse2(a);/*画树的结构*/
PreOrderTraverse3(a);/*计算、统计各种结点*/
window(1,17,15,25);/*在点(1,17,15,25)开始输出*/
printf("PreOrderTraverse is:\t");
PreOrderTraverse(a,vi);/*先序递归遍历二叉树*/
printf(" \nPostOrderTraverse is:\t");
PostOrderTraverse(a,vi);/*后序递归遍历二叉树*/
printf("\nInOrderTraverse is:\t");
InOrderTraverse(a,vi);/*中序递归遍历二叉树*/
print1();/*输出各种结点,以及其的数目*/
getch();
closegraph();/*关闭图象设备*/
textmode(LASTMODE);
}
本文来自: 书部落-电子书下载(www.shubulo.com) 详细出处参考:http://www.shubulo.com/viewthread.php?tid=252
http://student.zjzk.cn/course_ware/data_structure/web/shu/shu6.3.1.htm
http://www.4oa.com/Article/html/6/31/445/Article_445_3.html
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -