超级详细二叉树(包含EASYX画图)|数据结构

本文详细介绍了一个功能丰富的二叉树程序,包括创建、遍历、复制、交换子树等操作,并提供了绘制二叉树的方法。此外,还实现了查询结点及其家族成员的功能。

花了好久弄好的二叉树代码,希望能帮到你们

1、二叉树程序功能

前情提要 !!!

头文件:

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<Windows.h>
#include<math.h>
#pragma comment(lib,"Winmm.lib")								// 引用 Windows Multimedia API

结构体:

typedef char datatype;
typedef struct node
{
   
   
	datatype data;
	struct node* lchild, * rchild;
}bitree;

宏列表:

//宏列表
#define WIDTH 864												//界面宽度
#define HEIGTH 553												//界面高度
#define MAX 100													//数组大小
#define MAXROW 100												//最大行数
#define MAXCOL 100												//最大列数
#define TOPMARGIN 50											//上边距
#define LEFTMARGIN 50											//左边距
#define ALLIMAGE 450											//图片最大张数
#define PATH 120												//路径大小
#define WIDTH_1	1280											//动画界面宽度
#define HEIGTH_1 590											//动画界面高度

函数列表:

//函数列表
void Animation(bitree* t);										//开头动画
void MainMenu();												//主菜单界面
void mainmenu();												//主菜单实现
void SubMenu();													//子菜单界面
void submenu(bitree* t);										//子菜单实现
void Out(bitree* t);											//输出(前序 中序 后序)
void Preorder(bitree* t);										//前序遍历
void Inorder(bitree* t);										//中序遍历
void Lastorder(bitree* t);										//后序遍历
bitree* Create();												//前序建表
int Heigth(bitree* t);											//树的高度
void Change(bitree* t);											//交换左右子树
void Leaf(bitree* t);											//统计叶子数
bitree* Copytree(bitree* t);									//复制二叉树
void AllPath(bitree *t, char path[], int pathLength);			//所有路径
void LongestPath(bitree* t, char path[], int pathLength, char longestPath[]);//最长路径
//void gotoxy(int x, int y);									//光标定位
void Start();													//初始数组
void Perfect();													//标志函数
void Draw(bitree* t, int root_x, int root_y, int r_c_interval, char disp_buf[][MAXCOL]);//字符二叉树
void DrawEasyx(bitree* tree,int x,int y,int xFar,int yFar);		//easyx画二叉树
void PrintUITree(bitree* tree);									//画图
void Root_Leaf(bitree* t);										//根、叶结点
bitree* GetNode(bitree* t,char node);							//查询结点
void Genealogy(bitree* t, bitree* treenode);					//结点族谱
bitree *Parent(bitree* t, bitree* treenode);    				//双亲结点
int Ancestors(bitree* t, bitree* treenode);						//祖先结点
void Children(bitree* treenode);								//孩子结点
void Descendant(bitree* treenode);								//子孙结点
bitree* Brother(bitree* t, bitree* treenode);					//兄弟结点
int Floor(bitree* t, bitree* treenode,int height);				//结点层数

全局变量:

//全局变量列表
static int num = 0;												//叶子数
bitree* treeNode;												//树的结点
static int longestlength = 0;									//最长路径下标计数
char dispbuf[MAXROW][MAXCOL];									//存储二叉树结构图的数组
int effective_line;												//记录二叉树数组中的使用过的行数
const int UI_FAR_X = 220;
const int UI_FAR_Y = 20;

1.1主菜单功能:

在这里插入图片描述

1.前序创建二叉树

在函数中调用Create()则可以进行前序遍历创建二叉树

//前序建表
bitree* Create()
{
   
   
	bitree* t;
	char ch;
	ch = getchar();
	if (ch==' ')//空格
	{
   
   
		t = NULL;
	}
	else
	{
   
   
		t = (bitree*)malloc(sizeof(bitree));
		t->data = ch;
		t->lchild = Create();
		t->rchild = Create();
	}
	return t;
}

2.前中后序输出

//输出(前序 中序 后序)
void Out(bitree* t)
{
   
   
	printf(
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值