抽象类型实现二叉树实验报告1Word文档格式.doc
《抽象类型实现二叉树实验报告1Word文档格式.doc》由会员分享,可在线阅读,更多相关《抽象类型实现二叉树实验报告1Word文档格式.doc(56页珍藏版)》请在冰豆网上搜索。
![抽象类型实现二叉树实验报告1Word文档格式.doc](https://file1.bdocx.com/fileroot1/2022-10/7/18a6f94a-e066-4e73-a00e-806838fe38e7/18a6f94a-e066-4e73-a00e-806838fe38e71.gif)
若Dr≠φ,则Dr中存在惟一的元素xr,<
root,xr>
∈H,且存在D1上的关系HrH;
H={<root,xl>,<root,xr>,Hl,Hr};
(4)(Dl,{Hl})是一棵符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一棵符合本定 义的二叉树,称为根的右子树。
基本操作P:
InitBiTree(&
T);
操作结果:
构造空二叉树T。
DestroyBiTree(&
初始条件:
二叉树T存在
销毁二叉树T
CreateBiTree(&
T,definition);
definition给出二叉树T的定义
按definition构造二叉树T
ClearBiTree(&
将二叉树T清为空树
BiTreeEmpty(T);
若T为空二叉树,则返回TRUE,否则返回FALSE
BiTreeDepth(T);
返回T的深度
Root(T);
返回T的根
Value(T,e);
二叉树T存在,e是T中某个结点
返回e的值
Assign(T,&
e,value);
结点e赋值为value
Parent(T,e);
若e是T的非根节点,则返回它的双亲,否则返回“空”
LeftChild(T,e);
返回e的左孩子。
若e无左孩子,则返回“空”
RightChild(T,e);
返回e的右孩子。
若e无右孩子,则返回“空”
LeftSibling(T,e);
返回e的左兄弟。
若e是T的左孩子或无左兄弟,则返回“空”
RightSibling(T,e);
返回e的右兄弟。
若e是T的右孩子或无右兄弟,则返回“空”
InsertChild(T,p,LR,c);
二叉树T存在,p指向T中某个结点,LR为0或1,非空二叉树c与T不相交且右子 树为空。
根据LR为0或1,插入c为T中p所指向结点的左或右子树。
p所指结点的原有左或 右子树则成为c的右子树
DeleteChild(T,p,LR);
二叉树T存在,p指向T中某个结点,LR为0或1.
根据LR为0或1,删除T中P所指结点的左或右子树
PreOrderTraverse(T,Visit());
二叉树T存在,Visit是对结点操作的应用函数
先序遍历T,对每个结点调用函数Visit一次且仅一次。
一旦visit()失败,则操 作失败。
InOrderTraverse(T,Visit());
中序遍历T,对每个结点调用函数Visit一次且仅一次。
一旦visit()失败,则操 作失败
PostOrderTraverse(T,Visit());
后序遍历T,对每个结点调用函数Visit一次且仅一次。
一旦visit()失败,则操 作失败
LevelOrderTraverse(T,Visit());
层次遍历T,对每个结点调用函数Visit一次且仅一次。
}ADTBinaryTree
三、存储结构定义及各基本操作的实现
1.公用头文件base.h
//**************************Includes*****************************
#include"
stdio.h"
conio.h"
stdlib.h"
windows.h"
malloc.h"
math.h"
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define MAXSIZE 100 //最多结点数
typedef int Status;
typedef char TElemType;
//结点类型为字符型
//**************************其它操作********************************************
short wherex() //返回光标的x坐标
{
CONSOLE_SCREEN_BUFFER_INFOcsbinfo;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&
csbinfo);
returncsbinfo.dwCursorPosition.X;
}
short wherey() //返回光标的y坐标
returncsbinfo.dwCursorPosition.Y;
voidgotoxy(shortx,shorty) //移动光标到(x,y)坐标
COORDpoint={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point);
voidSetColor(unsignedshortTextColor=7)//设置字体颜色
{
unsignedBackGroundColor=0;
HANDLEhCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,TextColor|BackGroundColor);
void Print(unsignedx,unsignedy)//在(x,y)位置显示方框
SetColor(14);
gotoxy(x,y++);
printf("
╭──────────────╮"
);
││"
╰──────────────╯"
SetColor();
void ClearWindow(unsignedx1=50,unsignedy1=0,
unsignedx2=80,unsignedy2=10)
//将屏幕(x1,y1,x2,y2)区域清屏,并显示方框
unsigned i,j;
for(i=x1;
i<
x2;
i++)
for(j=y1;
j<
y2;
j++)
{
gotoxy(i,j);
printf("
"
}
Print(x1-2,y1);
void ClearLine(unsignedy=23)
//清除第y行与y+1行的字符,并使光标在行首,默认清除第23与24行
for(inti=0;
158;
i++)
gotoxy(i,y);
putchar('
'
gotoxy(0,wherey()-1);
void ClearAera(unsignedx=96,unsignedy=22)
//清除(0,y)-(x,y+1)区域的字符,并使光标移动到y
for(unsignedi=0;
i<
x;
gotoxy(i%(x/2),y+(i/48));
gotoxy(0,y);
//*************************************************************************
Status Visit(TElemTypee)//二叉树结点Visit函数,显示字符的值
printf("
%c"
e);
returnOK;
2.顺序存储结构
存储结构定义:
//*****************二叉树顺序存储结构**********************
/*在一棵具有n个结点的满二叉树中,从树根起,自上层到下层,
/*逐层从左到右给所有结点从1开始编号到n,非满二叉树补为满二叉树再编号,
/*存储到数组中(0号单元存储结点个数),空结点规定为'
&
'
。
*/
typedef TElemType *SqBiTree;