easyx实现二叉树图形遍历
时间: 2023-07-07 08:08:43 浏览: 220
C++EGE:烟花女友表白代码龙年快乐
以下是使用EasyX图形库实现二叉树的图形遍历的示例代码。其中包括了前序遍历、中序遍历和后序遍历的图形化展示。
```c++
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
//树结构体
typedef struct tree
{
int data;
struct tree *left;
struct tree *right;
}Tree;
//创建二叉树
Tree *createTree()
{
Tree *p;
int data;
scanf("%d",&data);
if(data == -1)
p = NULL;
else
{
p = (Tree*)malloc(sizeof(Tree));
p->data = data;
p->left = createTree();
p->right = createTree();
}
return p;
}
//前序遍历并图形化展示
void preOrder(Tree *p, int x, int y, int coe)
{
if(p)
{
char str[10];
settextcolor(RED);
sprintf(str, "%d", p->data);
outtextxy(x, y, str); //输出当前节点的值
if(p->left)
{
settextcolor(YELLOW);
sprintf(str, "%d", p->left->data);
line(x, y, x-coe, y+coe); //绘制连线
outtextxy(x-coe-20, y+coe-20, str); //输出左子节点的值
}
preOrder(p->left, x-coe, y+coe, coe/2); //递归遍历左子树
if(p->right)
{
settextcolor(YELLOW);
sprintf(str, "%d", p->right->data);
line(x, y, x+coe, y+coe); //绘制连线
outtextxy(x+coe+20, y+coe-20, str); //输出右子节点的值
}
preOrder(p->right, x+coe, y+coe, coe/2); //递归遍历右子树
}
}
//中序遍历并图形化展示
void inOrder(Tree *p, int x, int y, int coe)
{
if(p)
{
inOrder(p->left, x-coe, y+coe, coe/2); //递归遍历左子树
char str[10];
settextcolor(RED);
sprintf(str, "%d", p->data);
outtextxy(x, y, str); //输出当前节点的值
if(p->left)
{
settextcolor(YELLOW);
sprintf(str, "%d", p->left->data);
line(x, y, x-coe, y+coe); //绘制连线
outtextxy(x-coe-20, y+coe-20, str); //输出左子节点的值
}
if(p->right)
{
settextcolor(YELLOW);
sprintf(str, "%d", p->right->data);
line(x, y, x+coe, y+coe); //绘制连线
outtextxy(x+coe+20, y+coe-20, str); //输出右子节点的值
}
inOrder(p->right, x+coe, y+coe, coe/2); //递归遍历右子树
}
}
//后序遍历并图形化展示
void postOrder(Tree *p, int x, int y, int coe)
{
if(p)
{
postOrder(p->left, x-coe, y+coe, coe/2); //递归遍历左子树
postOrder(p->right, x+coe, y+coe, coe/2); //递归遍历右子树
char str[10];
settextcolor(RED);
sprintf(str, "%d", p->data);
outtextxy(x, y, str); //输出当前节点的值
if(p->left)
{
settextcolor(YELLOW);
sprintf(str, "%d", p->left->data);
line(x, y, x-coe, y+coe); //绘制连线
outtextxy(x-coe-20, y+coe-20, str); //输出左子节点的值
}
if(p->right)
{
settextcolor(YELLOW);
sprintf(str, "%d", p->right->data);
line(x, y, x+coe, y+coe); //绘制连线
outtextxy(x+coe+20, y+coe-20, str); //输出右子节点的值
}
}
}
int main()
{
initgraph(800, 600); //初始化图形窗口
setbkcolor(WHITE);
settextstyle(20, 0, "宋体");
setlinestyle(PS_SOLID, 2);
outtextxy(350, 50, "二叉树遍历图形演示");
outtextxy(100, 150, "请输入二叉树节点的值(-1表示空节点):");
Tree *root = createTree(); //创建二叉树
//前序遍历并图形化展示
outtextxy(50, 300, "前序遍历:");
preOrder(root, 400, 300, 200);
//中序遍历并图形化展示
outtextxy(50, 400, "中序遍历:");
inOrder(root, 400, 400, 200);
//后序遍历并图形化展示
outtextxy(50, 500, "后序遍历:");
postOrder(root, 400, 500, 200);
getch();
closegraph(); //关闭图形窗口
return 0;
}
```
在运行程序后,用户可以输入二叉树的节点值,程序将会自动创建并展示二叉树的三种遍历方式的图形化展示。用户可以通过观察图形化展示,更直观地理解二叉树的遍历方式。
阅读全文