妨的组词
(
题 目:二叉树遍历算法的设计
学生姓名:孙跃
学 院:理学院
系 别:数学系
专 业:信息与计算科学
二〇一四年十一月
一、实验目的
通过理解二叉树的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。
二、程序分析
本演示程序用Visual C++ 6.0编写,完成二叉树的遍历算法。
1.按先序次序输入二叉树中结点的值,构造二叉链表表示的二叉树t;
2.对二叉树t作先序、中序、后序遍历的递归算法,输出结果;
3.计算二叉树t的深度,输出结果;
幼儿园中班教案4.计算二叉树t的叶子结点个数。
三、程序设计
在开头定义了二叉树的链式存储结构,此处采用了每个结点中设置三个域, 即值域,左指针域和右指针域。
1、二叉树的建立链式存储结构,首先typedef struct BiTNode:定义二叉树的链式存储结构,此处采用了每个结点中设置三个域,data:即值域,*lchild:左指针域和rchild:右指针域;
2、二叉树的前序遍历;利用二叉链表作为存储结构的前序遍历:先访问根结点,再依次访问左右子树;
3、二叉树的中序遍历;利用二叉链表作为存储结构的中序遍历:先访问左子数,再访问根结点,最后访问右子树;
4、二叉树的后序遍历;利用二叉链表作为存储结构的前序遍历:先访问左右子树,再访问根结点;
5、求二叉树的深度:首先判断二叉树是否为空,若为空则此二叉树的深度为0。否则,就先别求出左右子树的深度并进行比较,取较大的+1就为二叉树的深度;
6、二叉树的求叶子结点的个数计算;先分别求得左右子树中各叶子结点个数,再计算出两者之和即为二叉树的叶子结点数;
7、主函数:主函数中分别调用各函数。
四、实验程序
#include<stdio.h>
#include<malloc.h>
#define M 20
typedef struct node
{
char data;
struct node *lchild,*rchild;湖色
}BTnode;
BTnode * create()
{
BTnode *t;
char ch;
scanf("%c",&ch);
if(ch=='#')
t=NULL;
el
{
母爱无边
t=(BTnode*)malloc(sizeof(BTnode));
读书笔记摘抄好词好句
t->data=ch;
t->lchild=create();
t->rchild=create();
}
return t;
}
void Inordertraver(BTnode *t)
{
int i=0;
BTnode *p,*s[M];
p=t;
do
{
while(p!=NULL)
{
s[i++]=p;
p=p->lchild;
}
if(i>0)
{
p=s[--i];
printf("%c\t",p->data);
p=p->rchild;
}
}while(i>0||p!=NULL);
}
寝室装扮void Preordertraver(BTnode *t)
{
int i=0;
BTnode *p,*s[M];
p=t;
do
{
while(p!=NULL)
{
printf("%c\t",p->data);
if(p->rchild!=NULL)
s[i++]=p->rchild;
p=p->lchild;
}
if(i>0)
p=s[--i];
}while(i>0||p!=NULL);
}
void Postordertraver(BTnode *t)
{
int sl[M];
int i=0;
BTnode *p,*s[M];
p=t;
do
{
while(p!=NULL)
{
s[i]=p;
sl[i++]=0;
p=p->lchild;
}
while(i>0&&sl[i-1]==1)
{
p=s[--i];
printf("%c\t",p->data);
free(p);
}
if(i>0)
{
sl[i-1]=1;
p=s[i-1];
p=p->rchild;
}人民英雄纪念碑碑文
}while(i>0);广州有什么大学
printf("\n");
}
int high(BTnode *t)
{
int h,lh,rh;
if(!t)
return 0;
lh=high(t->lchild);
rh=high(t->rchild);
h=lh?lh+1:rh+1;