分类二叉树的相关算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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右边需要补充的空格字符串

相关文档
最新文档