数据结构二叉树 ppt课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 完全二叉树的顺序存储结构
根据完全二叉树的性质 ,对于深度为h 的完全二叉树, 将 树中所有结点的数据信息按照编号的顺序依次存储到一维 数组BT[1:2h-1]中,由于编号与数组的下标一一对应, 该数组 就是该完全二叉树的顺序存储结构.
1A
2
3
B
C
4
56
7
DE FG
8 9 10
H IJ
BT[1:15] A BC D E FGH I J
A
B
CX
E FGH I
J
四. 基本名词术语
1. 结点的度:该结点拥有的子树的数目。
2. 树的度: 树中结点度的最大值。
3. 叶结点:度为0 的结点. 4. 分支结点: 度非0 的结点. 5. 层次的定根义结: 点为第一层,若某结点在第i 层,
则其孩子结点(若存在)为第i+1层.
A
第1层
B
CX
第2层
三. 二叉树的性质
1. 一棵非空二叉树的第i 层最多有2i–1个结点(i1)。
2. 深度为h 的非空二叉树最多有2h -1个结点.
3. 若非空二叉树有n0个叶结点,有n2个度为2的结点,
则
n0=n2+1
4. 具有n个结点的完全二叉树的深度h=log2n+1.
二叉树的存储结构
一.二叉树的顺序存储结构
链结点的构造为
lchild data rchild
其中, data 为数据域 lchild 与rchild 分别为指向左、右子树的指针域.
T A
A
B
C
B
C
DE J
FG I
^ D^ E^ ^ F ^G^
^J ^
^ I^
6.3.3 二叉树的遍历
二.前序遍历
三.中序遍历
四.后序遍历
例
A
B
C
DKFH
第6章 树与二叉树
例1
校长
一二三 … 六 …
系系系
系
601 602 603 … 教
务
科
A B C D…
教 务
科 研
总 务
工
…
处处处厂
张李王…
三四五
例2
(根目录)
\
f1 f2 f3 … fn d1 d2 … dm … f11 f12 … f1k d11 d12 … ……
例3ቤተ መጻሕፍቲ ባይዱ
1 树的基本概念 2 树的存储结构 3 二叉树 4 二叉树的存储结构 5 二叉树的遍历
6.3.2 线索二叉树
1.何谓线索二叉树?
遍历结果是求得结点的一个线性序列。指向 该线性序列“前驱”和“后继”的指针,称“线 索”;包含“线索”的存储结构,称为“线索链 表”;与其相应的二叉树,称为“线索二叉树”; 对二叉树以某种次序遍历,使其变为线索二叉树 的过程,称为“线索化”。
2.线索链表中结点的结构
递归定义
A
B
C
X
E F GH I
J
A的第1棵子树
A的第3棵子树
A的第2棵子树
二. 树(逻辑上)的特点
1. 有且仅有一个结点没有前驱结点,该结点为树的根结点。 2. 除了根结点外,每个结点有且仅有一个直接前驱结点。 3. 包括根结点在内,每个结点可以有多个后继结点。
4. 树形表示法
借助自然界中一棵倒置的树的形状来表示数 据元素之间层次关系的方法。
在二叉链表的结点结构中增加两个标志域,并 规定:
lchild LTag data RTag rchild
其中: 0
LTag = 1
0 RTag =
1
lchild 域指示结点的左孩子 lchild 域指示结点的前驱 rchild 域指示结点的右孩子 rchild 域指示结点的后继
二叉树二叉线索存储表示
6 线索二叉树
6.1 树的基本概念
一. 树的定义
树是由n0 个结点组成的有穷集合(不妨用D表示) 以及结点之间关系组成的集合构成的结构。
当n=0 时,称该树为空树; 在任何一棵非空的树中,有一个特殊的结点t D,称 之为该树的根结点;其余结点D–{t}被分割成m>0个 不相交的子集D1, D2, … ,Dm,其中每一个子集Di又为一棵 树,分别称之为t 的子树。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2. 一般二叉树的顺序存储结构
A
B
C
D EFG
HJ
I
1A
2
3
B
C
4
56
7
DE FG
8 910 11 12 13
H
J
I
BT[1:15]
A BC D EFG H J
I
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
typedef enum { Link, Thread } PointerThr; // Link==0:指针,Thread==1:线索
typedef struct BiThrNode{ TElemType data; Struct BiThrNode *lchild, *rchild; // 左右孩子指针 PointerThr LTag, RTag; // 左右标志
} BiThrNode, *BiThrTree;
3.线索二叉树图例
(空) 根
根根
根
左 子 树
右 子 树
左 子 树
右 子 树
二. 两种特殊形态的二叉树
1. 满二叉树
若一棵二叉树中的结点, 或者为叶结点, 或者具有两 棵非空子树,并且叶结点都集 中在二叉树的最下面一层.这 样的二叉树为满二叉树.
2.完全二叉树
若一棵二叉树中只有最下 面两层的结点的度可以小于2, 并且最下面一层的结点(叶结 点)都依次排列在该层从左至 右的位置上。这样的二叉树为 完全二叉树.
J
I
G
E
前序遍历序列: A, B, D, K, J, G, C, F, I, E, H
中序遍历序列: D, B, G, J, K, A, F, I, E, C, H
后序遍历序列: D, G, J, K, B, E, I, F, H, C, A
按层次遍历序列: A, B, C, D, K, F, H, J, I, G, E
E FGH I J
第3层
6. 树的深度: 树中结点所处的最大层次数. 7. 树林(森林): m0 棵不相交的树组成的树的集合. 8. 树的有序性: 若树中结点的子树的相对位置不能
随意改变, 则称该树为有序树,否 则称该树为无序树。
A
B CX E FGH I J
深度为3的树
6.2 二叉树
二叉树的基本形态:
对于一般二叉树, 只须在二叉树中“添加”一些实际上 二叉树中并不存在的“虚结点” ( 可以认为这些结点的数 据 信息为空), 使其在形式上成为一棵“完全二叉树”, 然 后 按照完全二叉树的顺序存储结构的构造方法将所有结点的 数据信息依次存放于数组BT[1: 2h -1]中。
二.二叉树的链式存储结构(二叉链表)
根据完全二叉树的性质 ,对于深度为h 的完全二叉树, 将 树中所有结点的数据信息按照编号的顺序依次存储到一维 数组BT[1:2h-1]中,由于编号与数组的下标一一对应, 该数组 就是该完全二叉树的顺序存储结构.
1A
2
3
B
C
4
56
7
DE FG
8 9 10
H IJ
BT[1:15] A BC D E FGH I J
A
B
CX
E FGH I
J
四. 基本名词术语
1. 结点的度:该结点拥有的子树的数目。
2. 树的度: 树中结点度的最大值。
3. 叶结点:度为0 的结点. 4. 分支结点: 度非0 的结点. 5. 层次的定根义结: 点为第一层,若某结点在第i 层,
则其孩子结点(若存在)为第i+1层.
A
第1层
B
CX
第2层
三. 二叉树的性质
1. 一棵非空二叉树的第i 层最多有2i–1个结点(i1)。
2. 深度为h 的非空二叉树最多有2h -1个结点.
3. 若非空二叉树有n0个叶结点,有n2个度为2的结点,
则
n0=n2+1
4. 具有n个结点的完全二叉树的深度h=log2n+1.
二叉树的存储结构
一.二叉树的顺序存储结构
链结点的构造为
lchild data rchild
其中, data 为数据域 lchild 与rchild 分别为指向左、右子树的指针域.
T A
A
B
C
B
C
DE J
FG I
^ D^ E^ ^ F ^G^
^J ^
^ I^
6.3.3 二叉树的遍历
二.前序遍历
三.中序遍历
四.后序遍历
例
A
B
C
DKFH
第6章 树与二叉树
例1
校长
一二三 … 六 …
系系系
系
601 602 603 … 教
务
科
A B C D…
教 务
科 研
总 务
工
…
处处处厂
张李王…
三四五
例2
(根目录)
\
f1 f2 f3 … fn d1 d2 … dm … f11 f12 … f1k d11 d12 … ……
例3ቤተ መጻሕፍቲ ባይዱ
1 树的基本概念 2 树的存储结构 3 二叉树 4 二叉树的存储结构 5 二叉树的遍历
6.3.2 线索二叉树
1.何谓线索二叉树?
遍历结果是求得结点的一个线性序列。指向 该线性序列“前驱”和“后继”的指针,称“线 索”;包含“线索”的存储结构,称为“线索链 表”;与其相应的二叉树,称为“线索二叉树”; 对二叉树以某种次序遍历,使其变为线索二叉树 的过程,称为“线索化”。
2.线索链表中结点的结构
递归定义
A
B
C
X
E F GH I
J
A的第1棵子树
A的第3棵子树
A的第2棵子树
二. 树(逻辑上)的特点
1. 有且仅有一个结点没有前驱结点,该结点为树的根结点。 2. 除了根结点外,每个结点有且仅有一个直接前驱结点。 3. 包括根结点在内,每个结点可以有多个后继结点。
4. 树形表示法
借助自然界中一棵倒置的树的形状来表示数 据元素之间层次关系的方法。
在二叉链表的结点结构中增加两个标志域,并 规定:
lchild LTag data RTag rchild
其中: 0
LTag = 1
0 RTag =
1
lchild 域指示结点的左孩子 lchild 域指示结点的前驱 rchild 域指示结点的右孩子 rchild 域指示结点的后继
二叉树二叉线索存储表示
6 线索二叉树
6.1 树的基本概念
一. 树的定义
树是由n0 个结点组成的有穷集合(不妨用D表示) 以及结点之间关系组成的集合构成的结构。
当n=0 时,称该树为空树; 在任何一棵非空的树中,有一个特殊的结点t D,称 之为该树的根结点;其余结点D–{t}被分割成m>0个 不相交的子集D1, D2, … ,Dm,其中每一个子集Di又为一棵 树,分别称之为t 的子树。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2. 一般二叉树的顺序存储结构
A
B
C
D EFG
HJ
I
1A
2
3
B
C
4
56
7
DE FG
8 910 11 12 13
H
J
I
BT[1:15]
A BC D EFG H J
I
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
typedef enum { Link, Thread } PointerThr; // Link==0:指针,Thread==1:线索
typedef struct BiThrNode{ TElemType data; Struct BiThrNode *lchild, *rchild; // 左右孩子指针 PointerThr LTag, RTag; // 左右标志
} BiThrNode, *BiThrTree;
3.线索二叉树图例
(空) 根
根根
根
左 子 树
右 子 树
左 子 树
右 子 树
二. 两种特殊形态的二叉树
1. 满二叉树
若一棵二叉树中的结点, 或者为叶结点, 或者具有两 棵非空子树,并且叶结点都集 中在二叉树的最下面一层.这 样的二叉树为满二叉树.
2.完全二叉树
若一棵二叉树中只有最下 面两层的结点的度可以小于2, 并且最下面一层的结点(叶结 点)都依次排列在该层从左至 右的位置上。这样的二叉树为 完全二叉树.
J
I
G
E
前序遍历序列: A, B, D, K, J, G, C, F, I, E, H
中序遍历序列: D, B, G, J, K, A, F, I, E, C, H
后序遍历序列: D, G, J, K, B, E, I, F, H, C, A
按层次遍历序列: A, B, C, D, K, F, H, J, I, G, E
E FGH I J
第3层
6. 树的深度: 树中结点所处的最大层次数. 7. 树林(森林): m0 棵不相交的树组成的树的集合. 8. 树的有序性: 若树中结点的子树的相对位置不能
随意改变, 则称该树为有序树,否 则称该树为无序树。
A
B CX E FGH I J
深度为3的树
6.2 二叉树
二叉树的基本形态:
对于一般二叉树, 只须在二叉树中“添加”一些实际上 二叉树中并不存在的“虚结点” ( 可以认为这些结点的数 据 信息为空), 使其在形式上成为一棵“完全二叉树”, 然 后 按照完全二叉树的顺序存储结构的构造方法将所有结点的 数据信息依次存放于数组BT[1: 2h -1]中。
二.二叉树的链式存储结构(二叉链表)