数据结构教程 第二十三课 二叉树的存储结构

教学目的: 掌握二叉树的两种存储结构

教学重点: 链式存储结构

教学难点: 链式存储二叉树的基本操作

授课内容:

一、复习二叉树的定义

二叉树的基本特征:每个结点的度不大于2。

二、顺序存储结构

#define MAX_TREE_SIZE 100

typedef TElemType SqBiTree[MAX_TREE_SIZE];

SqBiTree bt;

结点编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
结点值 1 2 3 4 5 0 0 0 0 6 7 0 0 0 0

第i号结点的左右孩子一定保存在第2i及2i+1号单元中。

缺点:对非完全二叉树而言,浪费存储空间

三、链式存储结构

一个二叉树的结点至少保存三种信息:数据元素、左孩子位置、右孩子位置

对应地,链式存储二叉树的结点至少包含三个域:数据域、左、右指针域。

也可以在结点中加上指向父结点的指针域P。

对结点有二个指针域的存储方式有以下表示方法:

typedef struct BiTNode{

TElemType data;

struct BitNode *lchild,*rchild;

}BiTNode,*BiTree;

基于该存储结构的二叉树基本操作有:

Status CreteBiTree(BiTree &T);

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,

//构造二叉链表表示的二叉树T。

Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e));

//采用二叉链表存储结构,Visit是对结点操作的应用函数

//先序遍历二叉树T,对每个结点调用函数Visit一次且仅一次

//一旦visit()失败,则操作失败

Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e));

//采用二叉链表存储结构,Visit是对结点操作的应用函数

//中序遍历二叉树T,对每个结点调用函数Visit一次且仅一次

//一旦visit()失败,则操作失败

Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e));

//采用二叉链表存储结构,Visit是对结点操作的应用函数

//后序遍历二叉树T,对每个结点调用函数Visit一次且仅一次

//一旦visit()失败,则操作失败

Status LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType e));

//采用二叉链表存储结构,Visit是对结点操作的应用函数

//层序遍历二叉树T,对每个结点调用函数Visit一次且仅一次

//一旦visit()失败,则操作失败

四、总结本课内容

顺序存储与链式存储的优缺点。

时间: 2024-12-31 12:07:17

数据结构教程 第二十三课 二叉树的存储结构的相关文章

数据结构教程 第二十七课 实验六 二叉树实验

教学目的: 掌握二叉树的链式存储结构 教学重点: 二叉树的链式存储实现方法 教学难点: 授课内容: 生成如下二叉树,并得出三种遍历结果: 一.二叉树的链式存储结构表示 typedef struct BiTNode{ TElemType data; struct BitNode *lchild,*rchild; }BiTNode,*BiTree; 二.二叉树的链式存储算法实现 CreateBiTree(&T,definition); InsertChild(T,p,LR,c); 三.二叉树的递归法

数据结构教程 第二十课 广义表

教学目的: 广义表的定义及存储结构 教学重点: 广义表的操作及意义 教学难点: 广义表存储结构 授课内容: 一.广义表的定义 广义表是线性表的推广,其表中的元素可以是另一个广义表,或其自身. 广义表的定义: ADT GList{ 数据对象:D={i=1,2,...,n>=0;ei(-AtomSet或ei(-GList, AtomSet为某个数据对象} 数据关系:R1={<ei-1,ei>|ei-1,ei(-D,2=<i<=n} 基本操作: InitGlist(&L);

数据结构教程 第二十一课 树、二叉树定义及术语

教学目的: 掌握树.二叉树的基本概念和术语,二叉树的性质 教学重点: 二叉树的定义.二叉树的性质 教学难点: 二叉树的性质 授课内容: 一.树的定义: 树是n(n>=0)个结点的有限集.在任意一棵非空树中: (1)有且仅有一个特定的称为根的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...Tm,其中每一个集合本身又是一棵树,并且称为根的子树. 二.树的基本概念: 树的结点包含一个数据元素及若干指向其子树的分支. 结点拥有的子树数称为结点的度. 度为0

数据结构教程 第十三课 队列

教学目的: 掌握队列的类型定义,掌握链队列的表示与实现方法 教学重点: 链队列的表示与实现 教学难点: 链队列的表示与实现 授课内容: 一.队列的定义: 队列是一种先进先出的线性表.它只允许在表的一端进行插入,而在另一端删除元素.象日常生活中的排队,最早入队的最早离开. 在队列中,允许插入的的一端叫队尾,允许删除的一端则称为队头. 抽象数据类型队列: ADT Queue{ 数据对象: D={ai| ai(-ElemSet,i=1,2,...,n,n>=0} 数据关系: R1={<ai-1,ai

数据结构教程 第二十八课 图的存储结构

教学目的: 掌握图的二种存储表示方法 教学重点: 图的数组表示及邻接表表示法 教学难点: 邻接表表示法 授课内容: 一.数组表示法 用两个数组分别存储数据元素(顶点)的信息和数据元素之间的关系(边或弧)的信息. // 图的数组(邻接矩阵)存储表示 #define INFINITY INT_MAX //最大值无穷大 #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef enum{DG,DN,AG,AN} GraphKind;//有向图,有向网,无向图,无向网 typ

数据结构教程 第二课 抽象数据类型的表示与实现

本课主题: 抽象数据类型的表示与实现 教学目的: 了解抽象数据类型的定义.表示和实现方法 教学重点: 抽象数据类型表示法.类C语言语法 教学难点: 抽象数据类型表示法 授课内容: 一.抽象数据类型定义(ADT) 作用:抽象数据类型可以使我们更容易描述现实世界.例:用线性表描述学生成绩表,用树或图描述遗传关系. 定义:一个数学模型以及定义在该模型上的一组操作. 关键:使用它的人可以只关心它的逻辑特征,不需要了解它的存储方式.定义它的人同样不必要关心它如何存储. 例:线性表这样的抽象数据类型,其数学

数据结构教程 第二十五课 单元测验

教学目的: 复习前面所学的内容,检验学习效果,拾遗补缺 教学重点: 教学难点: 授课内容: 测验题: 一,填空: 基本数据结构有____,____,____,____四种. 存储结构可根据数据元素在机器中的位置是否连续分为____,____. 算法的基本要求有_____,_____,____,____. 度量算法效率可通过_______,_______两方面进行. 栈的定义:_______________________. 二,简答: 举例说明数据对象.数据元素.数据项的定义. 类C语言和C语言

数据结构教程 第六课 线性表的顺序表示和实现

本课主题: 线性表的顺序表示和实现 教学目的: 掌握线性表的顺序表示和实现方法 教学重点: 线性表的顺序表示和实现方法 教学难点: 线性表的顺序存储的实现方法 授课内容: 复习 1.存储结构 逻辑结构   "数据结构"定义中的"关系"指数据间的逻辑关系,故也称数据结构为逻辑结构. 存储结构   数据结构在计算机中的表示称为物理结构.又称存储结构. 顺序存储结构 链式存储结构 2.线性表的类型定义 一.线性表的顺序表示 用一组地址连续的存储单元依次存储线性表的数据元素

数据结构教程 第十七课 实验三:栈的表示与实现及栈的应用

教学目的: 掌握栈的存储表示方式和栈基本操作的实现方法 教学重点: 栈的基本操作实现方法,栈的应用 教学难点: 栈的存储表示 实验内容: 一.栈的实现 实现栈的顺序存储. 栈实现示例 #include<stdio.h> #include<malloc.h> #include<conio.h> #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OK 1 #define EQUAL 1 #define OVERFL