/*本程序具有 获取二叉树高度 获得叶子节点数 屏幕显示二叉树 添加 删除 查找 遍历功能。
使用方法:进入时采用自定义的遍历方式,即从左到右,从上到下进行输入,空点以点代替。*/
#include <graphics.h>
#include <math.h> /*使用pow()必需*/
#include <stdio.h>
int x2,y2; /*根节点位置*/
int s = 0; /*查找标志*/
char e[2]; /*接收单个字符*/
char se[2];
typedef struct node
{
char data;
double x,y;
struct node * lChild;
struct node * rChild;
}treeNode;
treeNode * UserCreateTree(char *); /*用户遍历创建树*/
void UserOrder(treeNode * ); /*用户遍历,赋予节点位置信息,并画线*/
void TraverseTree(treeNode *); /*图形显示树*/
void PreOrder(treeNode * ,int); /*前序遍历*/
void InOrder(treeNode * ,int); /*中序遍历*/
void PostOrder(treeNode * ,int); /*后序遍历*/
void insert(treeNode * ,char ,char ,char ); /*插入节点*/
void deleteRoot(treeNode * ,char ); /*删除节点*/
void freeRootp(treeNode * ); /*释放节点*/
int Leaf(treeNode * ); /*查询叶子节点数*/
int High(treeNode * ); /*查询树高*/
int menu(treeNode * ); /*显示菜单*/
void PreOrderSelect(treeNode * ,char ); /*查找节点*/
main()
{
char p[31];
int gdriver=DETECT,gmode;
treeNode * rootp;
int m = 1;
registerbgidriver(EGAVGA_driver);
gdriver = VGA;
gmode = VGAHI;
initgraph(&gdriver,&gmode,"");
settextstyle(2,0,0); /*从左到右显示,8*8点阵字型*/
setcolor(14);
outtextxy(200,250,"welcome! this is tree!");
printf("UserCreateTree:");
scanf("%s",p);
cleardevice(); /*清屏函数*/
rootp = UserCreateTree(p);
UserOrder(rootp);
TraverseTree(rootp);
while(m)
{
m = menu(rootp);
}
closegraph();
}
/*用户遍历创建树*/
treeNode * UserCreateTree(char * p)
{
treeNode * rootp;
int i;
int a[127] = {0}; /*存储树根地址*/
for(i=0;p[i];i++) /*建树根,存地址*/
{
if(p[i]!='.') /*如果非点,建树根,赋数据,存树根地址*/
{
rootp = (treeNode *)malloc(sizeof(treeNode));
if(!rootp)return 0;
rootp->data = p[i]; /*只赋节点数据*/
a[