2024年4月30日发(作者:)
学院名称
学生姓名
课程名称
数据结构
专业班级
学号
实验题目
2 树
实验成绩
实验日期
一、实验目的与要求
熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的
应用。
二、主要仪器设备
Cfree
三、实验内容和原理
[问题描述]
编写递归算法,计算二叉树中叶子结点的数目。
[输入]
一棵二叉树的结点若无子树,则可将其子树看作“.”,输入时,按照前序序列的顺序输入该结点的内容。
对例题中的树,其输入序列ABD..EH...CF.I..G..。
A
○
B
○
C
○
D
○
E
○
F
○
G
○
H
○
I
○
[输出]
若为空二叉树,则输出:THIS IS A EMPTY BINARY TREE。若二叉树不空,输出叶子结点的个数。
[存储结构]
采用二叉链表存储
[算法的基本思想]
采用递归方法建立和遍历二叉树。首先建立二叉树的根结点,然后建立其左右子树,直到空子树为止。遍
历二叉树,若某一结点的左右孩子均为NULL,则该结点为叶子结点。
[参考源程序]
#include
#include
struct node{
char info;
struct node *llink, *rlink;
};
typedef struct node NODE;
NODE *create(){ //构造二叉树
char x;
NODE *p;
scanf("%c", &x);
printf("%c", x); //打印出已输入的二叉树
if(x!='.'){
p=(NODE *)malloc(sizeof(NODE));
p->info=x;
p->llink=create();
p->rlink=create();
}
else p=NULL;
return p;
}
int run(NODE *t){
static int count=0;
if(t){
run(t->llink); //递归遍历左子树,直到叶子处
run(t->rlink); //递归遍历右子树,直到叶子处
if(t->llink ==NULL && t->rlink == NULL) {
count++;
发布者:admin,转转请注明出处:http://www.yc00.com/news/1714421621a2443281.html
评论列表(0条)