分类二叉树的相关算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构《实验4》实验报告
实验项目4:分类二叉树的构建
回答问题完整、实验结果(运行结果界面及源程序,运行结果界面放在前面):
#define STUDENT EType
#include
#include
#include
#include
#include
//二叉树链式结构定义
struct STUDENT
{
char name[10];
char number[12];
char place[10];
char sex[3];
int age;
};
struct BinaryTreeNode
{
EType data;
BinaryTreeNode *LChild;
BinaryTreeNode *RChild;
};
typedef BinaryTreeNode BinaryTree; //堆栈结构定义
struct SType
{
BinaryTreeNode *ptr;
bool status;
};
struct Stack
{
SType *element;
int top;
int Maxsize;
};
struct Node_Ptr
{
BinaryTreeNode *ptr;
} ;
void DigitalToString(char str[],int n)
{
char temp;
char k=1;
int i=0;
while (n && i<80)
{
k=n%10+48;
n=n/10;
str[i]=k;
i++;
}
str[i]='\0';
int len=strlen(str);
for (i=0;i { temp=str[i]; str[i]=str[len-i-1]; str[len-i-1]=temp; } } void CreatStack(Stack &S,int MaxStackSize) {//构造一个最大容量为MaxStackSize的堆栈S.Maxsize=MaxStackSize; S.element=new SType[S.Maxsize]; S.top=-1; } bool IsEmpty(Stack &S) {//判断堆栈是否为空 if(S.top==-1)return true; return false; } bool IsFull(Stack &S) {//判断堆栈是否为满 if(S.top>= S.Maxsize-1) return true; else return false; } bool GetTop(Stack &S,SType &result) {//返回堆栈S中栈顶元素 if(IsEmpty(S))return false; result=S.element[S.top]; return true; } bool Pop(Stack &S,SType &result) {//将S栈顶的值取至result中,返回出栈后的状态 if(IsEmpty(S))return false; result.ptr=S.element[S.top].ptr; result.status=S.element[S.top].status; S.top--; return true; } bool Push(Stack &S,SType &result) {//result进s栈,返回进栈后的状态值 if(IsFull(S))return false; S.top++; S.element[S.top]=result; //S.element[S.top].status=result.status; return true; } //构造一棵二叉树 BinaryTree * MakeNode(EType &x) {//构造节点 BinaryTree *ptr; ptr=new BinaryTreeNode; if(!ptr) return NULL; ptr->data=x; ptr->LChild=NULL; ptr->RChild=NULL; return ptr; } void MakeBinaryTree(BinaryTree *root,BinaryTree *left,BinaryTree *right) {//链接root,left,right所指的节点指针为二叉树 root->LChild=left; root->RChild=right; } void BinaryDelete(BinaryTree *BT) {//二叉树的删除 if(BT) { BinaryDelete(BT->LChild); BinaryDelete(BT->RChild); delete BT; } } char *GetOuputInformationString(int WidthOfData, char *OutputInformation, char *outputstring) {//将一个元素的字符串OutputInformation转换为宽度为WidthOfData的等长字符串outputstring //例如,姓名是由四个字符组成,而WidthOfData为8,则在姓名字符串的两边分别连接两个字符,形成8个长度的字符串 int left_space,right_space; int i; char left_space_string[16]={""}; char right_space_string[16]={""}; int add_space; int len_OutputInformation=strlen(OutputInformation); //计算OutputInformation的字符个数 add_space=WidthOfData - len_OutputInformation; //计算需要补充的字符个数 left_space=add_space/2; //计算OutputInformation左边需要补充的字符个数 right_space=add_space-left_space; //计算OutputInformation右边需要补充的字符个数 for(i=1;i<=left_space;i++) //形成OutputInformation左边需要补充的空格字符串 strcat(left_space_string," "); for(i=1;i<=right_space;i++) //形成OutputInformation右边需要补充的空格字符串