二叉树的应用程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四、实验内容
1. 在自己的 U 盘“姓名+学号”文件夹中创建“实验六”文件夹,本次实验的所有程序和数据都要求存储到 本文件夹中。 2. 完成如下二叉树处理函数。
建树子函数 先序遍历子函数 中序遍历子函数 后序遍历子函数
程序代码:
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 int leafcount=0; typedef struct BiTNode{
实验三: 二叉树建立及遍历操作
一、实验目的
1. 熟悉二叉树的存贮结构及遍历方式,掌握有关算法的实现。 2. 能够利用二叉树解决具体问题。
二、实验环境
1. 硬件:每个学生需配备计算机一台。 2. 软件:DOS 或 Windwos 操作系统+Turbo C;
三、实验要求
1. 要求采用二叉链表作为存贮结构,完成二叉树的建立、先序、中序、和后序遍历的操作。其中先序遍 历和后序遍历采用递归算法,中序遍历采用非递归算法。 2. 输入数据:树中每个结点的数据类型设定为字符型。
{ if(T) { printf("%c ",T->data);
if (!T->lchild&&!T->rchild) leafcount+=1;
gjy_preOrder(T->lchild);
gjy_preOrder(T->rchild);
}
return 1;
}
int gjy_InOrderTraverse2(BiTree T)
char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree,*SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack;
int gjy_InitStack (SqStack *S) {
}
运行结果:
(SElemType));
if(!S->base)exit(0);
S->top=S->base+S->stacksize;
S->stacksize +=STACKINCREMENT;
}
*S->top++=e;
return 1;
}
BiTNode * gjy_Pop(SqStack *S,BiTree e)
S->base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S->base) exit(0); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return 1; } int gjy_StackEmpty(SqStack *S) { if(S->base==S->top)
{ if(S->top==S->base) return 0;
e=*--S->top;
printf("%c ",e->data);
return e;
}
int gjy_CreateBiTree(BiTree *T)
{ char ch;
源自文库
scanf("%c",&ch);
if(ch==' ')
{ *T=NULL; }
return 1; else
return 0; } int gjy_Push(SqStack *S,BiTree e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(SElemType
*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof
else{
if(!(*T=(BiTree)malloc(sizeof(BiTNode)))) return 0;
(*T)->data=ch;
gjy_CreateBiTree(&((*T)->lchild));
gjy_CreateBiTree(&((*T)->rchild));
}
return 1;
}
int gjy_preOrder(BiTree T)
{ BiTree T; leafcount=0; gjy_CreateBiTree(&T); printf("*************高君燕****************\n"); printf("先序遍历序列为:"); gjy_preOrder(T); printf("\n 中序遍历序列为:"); gjy_InOrderTraverse2(T); printf("\n 后序遍历序列为:"); gjy_oldOrder(T); printf("\n 叶子节点:%d \n",leafcount);
{ SqStack S;
BiTree p,t;
gjy_InitStack(&S);
p = T;
while (p || !gjy_StackEmpty(&S)) {
if (p) {
gjy_Push(&S, p);
p = p->lchild;
}
else {
t=gjy_Pop(&S, p);
p=t;
p = p->rchild;
}
}
return 1;
}
int gjy_oldOrder(BiTree T)
{ if(T!=NULL) { gjy_oldOrder(T->lchild); gjy_oldOrder(T->rchild); printf("%c ",T->data); } return 1;
} void main()
1. 在自己的 U 盘“姓名+学号”文件夹中创建“实验六”文件夹,本次实验的所有程序和数据都要求存储到 本文件夹中。 2. 完成如下二叉树处理函数。
建树子函数 先序遍历子函数 中序遍历子函数 后序遍历子函数
程序代码:
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 int leafcount=0; typedef struct BiTNode{
实验三: 二叉树建立及遍历操作
一、实验目的
1. 熟悉二叉树的存贮结构及遍历方式,掌握有关算法的实现。 2. 能够利用二叉树解决具体问题。
二、实验环境
1. 硬件:每个学生需配备计算机一台。 2. 软件:DOS 或 Windwos 操作系统+Turbo C;
三、实验要求
1. 要求采用二叉链表作为存贮结构,完成二叉树的建立、先序、中序、和后序遍历的操作。其中先序遍 历和后序遍历采用递归算法,中序遍历采用非递归算法。 2. 输入数据:树中每个结点的数据类型设定为字符型。
{ if(T) { printf("%c ",T->data);
if (!T->lchild&&!T->rchild) leafcount+=1;
gjy_preOrder(T->lchild);
gjy_preOrder(T->rchild);
}
return 1;
}
int gjy_InOrderTraverse2(BiTree T)
char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree,*SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack;
int gjy_InitStack (SqStack *S) {
}
运行结果:
(SElemType));
if(!S->base)exit(0);
S->top=S->base+S->stacksize;
S->stacksize +=STACKINCREMENT;
}
*S->top++=e;
return 1;
}
BiTNode * gjy_Pop(SqStack *S,BiTree e)
S->base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S->base) exit(0); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return 1; } int gjy_StackEmpty(SqStack *S) { if(S->base==S->top)
{ if(S->top==S->base) return 0;
e=*--S->top;
printf("%c ",e->data);
return e;
}
int gjy_CreateBiTree(BiTree *T)
{ char ch;
源自文库
scanf("%c",&ch);
if(ch==' ')
{ *T=NULL; }
return 1; else
return 0; } int gjy_Push(SqStack *S,BiTree e)
{
if(S->top-S->base>=S->stacksize)
{
S->base=(SElemType
*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof
else{
if(!(*T=(BiTree)malloc(sizeof(BiTNode)))) return 0;
(*T)->data=ch;
gjy_CreateBiTree(&((*T)->lchild));
gjy_CreateBiTree(&((*T)->rchild));
}
return 1;
}
int gjy_preOrder(BiTree T)
{ BiTree T; leafcount=0; gjy_CreateBiTree(&T); printf("*************高君燕****************\n"); printf("先序遍历序列为:"); gjy_preOrder(T); printf("\n 中序遍历序列为:"); gjy_InOrderTraverse2(T); printf("\n 后序遍历序列为:"); gjy_oldOrder(T); printf("\n 叶子节点:%d \n",leafcount);
{ SqStack S;
BiTree p,t;
gjy_InitStack(&S);
p = T;
while (p || !gjy_StackEmpty(&S)) {
if (p) {
gjy_Push(&S, p);
p = p->lchild;
}
else {
t=gjy_Pop(&S, p);
p=t;
p = p->rchild;
}
}
return 1;
}
int gjy_oldOrder(BiTree T)
{ if(T!=NULL) { gjy_oldOrder(T->lchild); gjy_oldOrder(T->rchild); printf("%c ",T->data); } return 1;
} void main()