- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告
课程名称:数据结构实验课程
实验四、串的基本操作练习
一、实验目的
1. 掌握二叉树的存储实现 2. 掌握二叉树的遍历思想 3. 掌握二叉树的常见算法的程序实现?
VC++6.0
三、实验内容
1.输入字符序列,建立二叉树的二叉链表结构。(可以采用先序序列) 2.实现二叉树的先序、中序、后序的递归遍历算法。 3.实现二叉树的先序、中序、后序的非递归遍历算法。 4.求二叉树的高度。 5.求二叉树的结点个数。 6.求二叉树的叶子结点的个数。分别编写实现上述算法的子函数,并编写一个主函数,在主函数中设计一个简单的菜单,分别调用上述子函数。
1.打开vc,新建文本,命名二叉树算法,编写代码。
2.编写代码:
#include stdio.h
#include stdlib.h
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
int i=0;
/*--------------------------------------建立堆栈------------------------------------------*/
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;//树类型
typedef struct SqStack
{
BiTNode *base;
BiTNode *top;
int stacksize;
} SqStack;//栈类型
void InitStack(SqStack *S)//创建二叉树
{
S-base=(BiTNode*)malloc(STACK_INIT_SIZE*sizeof(BiTNode));
S-top=S-base;
S-stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *S,BiTNode e)//进栈
{
if(S-top - S-base = S-stacksize)//如果栈空间不足
{
S-base=(BiTNode*)realloc(S-base,(S-stacksize+STACKINCREMENT)*sizeof(BiTNode));
S-top=S-base+S-stacksize;
S-stacksize+=STACKINCREMENT;
}
*(S-top)=e;
S-top++;
}
BiTNode Pop(SqStack *S)//出栈
{
S-top --;
return *S-top;
}
int StackEmpty(SqStack *S)//判断栈是否非空
{
if(S-top == S-base )
return 1;
else
return 0;
}
/*---------------------------------------------递归部分-------------------------------------------*/
BiTree Create(BiTree T)//建立二叉树
{
char ch;
ch=getchar();
if(ch==#)
T=NULL;
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
printf(申请内存空间失败!);
T-data=ch;
T-lchild=Create(T-lchild);
T-rchild=Create(T-rchild);
}
return T;
}
int Sumleaf(BiTree T)//计算叶子节点
{
int sum=0,m,n;
if(T)
{
if((!T-lchild)(!T-rchild))
sum++;
m=Sumleaf(T-lchild);
sum+=m;
n=Sumleaf(T-rchild);
sum+=n;
}
return sum;
}
/*int Sumleaf(BiTree T)//老师课堂上的计算叶子数的代码,没有问题
文档评论(0)