1 / 42
文档名称:

计算机程序设计基础——第十二讲和第十三讲.ppt

格式:ppt   页数:42
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

计算机程序设计基础——第十二讲和第十三讲.ppt

上传人:中国课件站 2011/10/11 文件大小:0 KB

下载得到文件列表

计算机程序设计基础——第十二讲和第十三讲.ppt

文档介绍

文档介绍:第十二讲
二叉树的建立
循环链表
1
二叉树的建立
2
二叉树的建立
建立二叉树的过程是一个“插入”过程,下面我们用一个例子来讲解这一过程。
我们想建立这样一棵二叉树,树中的每一个结点有一个整数数据名为data,有两个指针:左指针L,右指针R,分别指向这个结点的左子树和右子树,显然可以用如下名为TREE的结构来描述这种结点:
struct TREE
{
int data;
struct TREE *L, *R;
}
3
对二叉树最重要的是根,它起定位的作用,因此,首先建立的是根结点。也就是说,如果从键盘输入数据来建立二叉树,第一个数据就是这棵树的根的数据,之后再输入的数据,每一个都要与根中的数据作比较,以便确定该数据所在结点的插入位置。假定我们这里依然用图1的中序遍历的方式。即如果待插入结点的数据比根结点的数据小,则将其插至左子树,否则插入右子树。
定义一个递归函数
void insert(struct TREE **proot, struct TREE *p)
其中,指针p指向含有待插入数据的结点。
proot为树的根指针的地址。
insert函数棵理解为将p结点插入到*proot所指向的树中。
4
insert(proot, p)可用下列与或结点图来描述
5
注意在上图中proot是被调用函数的形参。从前面对它的定义看,proot是指针的指针,实际上是指向二叉树根结点的指针的指针,或者说是指向二叉树根结点的指针的地址。如下图。因此,在主程序调用insert函数时,
根结点
proot
实参
&root
实参为&root, p
形参为 proot, p
下面是建立二叉树的参考程序。
6
#include <> // 预编译命令
#include <> // 内存空间分配
#define null 0 // 定义空指针常量
#define LEN sizeof(struct TREE) // 定义常量,表示结构长度
struct TREE // 结构声明
{
int data; // 整型数
struct TREE *L,*R; // TREE结构指针
};
7
// 被调用函数insert,将结点插入二叉树
void insert (struct TREE **proot, struct TREE* p)
{ // 函数体开始
if (*proot==null) // 如果根结点为空
{
*proot = p; // 将结点p插入根结点
return; // 返回
}
else // 根结点不为空
{
// 如果p结点数据小于等于根结点数据
if (p->data <= (*proot)->data)
insert( &((*proot)->L), p); // 插入左子树
else // 如果p结点数据大于等于根结点数据
insert( &((*proot)->R), p); // 插入右子树
}
} // 函数体结束
8
// 被调用函数,形参为TREE结构指针,输出二叉树内容
void print(struct TREE *root)
{ // 函数体开始
if (root == null) // 根或子树根结点为空
return; // 返回
print(root->L); // 输出左子树内容
printf("%d",root->data);// 输出根结点内容
print(root->R); // 输出右子树内容
} // 被调用函数结束
void main() // 主函数开始
{ // 函数体开始
struct TREE *root, *p; // TREE型结构指针
int temp; // 临时变量,用于用户输入数据
root = null; // 初始化二叉树根结点为空
p = null; // 初始化待插入结点的指针为空
printf("请输入待插入结点的数据\n"); // 提示信息
printf("如果输入-1表示插入过程结束\n");// 提示信息
scanf("%d",&temp); // 输入待插入结点数据
9
while(temp != -1) // 当型循环,-1为结束标志
{ // 循环体开始
// 为待插入结点分配内存单元
p = (struct TREE *) malloc(LEN);
p->data = temp; // 将temp赋值给p结点的数据域
p->L = p->R = null; // 将p结点的左右指针域置为空
insert( &root, p ); // 将p结点插入到根为root的树中

最近更新

2024年吉林水利电力职业学院单招职业适应性考.. 40页

2024年吉林通用航空职业技术学院单招职业适应.. 39页

2024年周口职业技术学院单招职业倾向性测试题.. 41页

2026年优秀大学生个人主要事迹 27页

2024年唐山工业职业技术学院单招职业适应性考.. 38页

2024年四川信息职业技术学院单招职业技能考试.. 40页

高精度压力测量装置改进 35页

2024年大理农林职业技术学院单招综合素质考试.. 40页

2024年天津电子信息职业技术学院单招职业适应.. 40页

2024年天津铁道职业技术学院单招职业适应性考.. 41页

2026年企业员工年度考核个人总结 29页

2024年宁夏葡萄酒与防沙治沙职业技术学院单招.. 40页

2024年宁波卫生职业技术学院单招职业适应性考.. 40页

2024年宁波职业技术学院单招职业适应性考试题.. 43页

高效配置版本控制 37页

2024年安徽城市管理职业学院单招职业倾向性测.. 41页

2024年安徽工贸职业技术学院单招职业倾向性考.. 41页

2024年安徽电气工程职业技术学院单招职业倾向.. 40页

2024年安徽省淮北市单招职业适应性测试题库完.. 39页

2026年以生活中的烦恼为话题叙事作文 5页

2026年以我的爸爸为主题的作文 9页

2026年以大熊猫为话题的作文500字 7页

2026年以“微笑面对生活”的话题作文 10页

2025年国家开放大学《建筑力学》章节测试参考.. 13页

【人教版英语字帖】七年级下册单词表衡水体字.. 42页

国开《建筑力学》期末机考答案 15页

介绍医院门诊ppt 28页

农村人才流失国外研究报告 2页

栏杆计算书 2页

黄酒评分、扣分标准表(共1页) 1页