数据结构 树ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-
二叉树的顺序存储
非完全二叉树的顺序存储
A BC
ABC
DE
FG
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
DE
FG
非完全二叉树不适合进行顺序存储
-
二叉树的链式存储
一般用二叉链表存储二叉树(每个结点有两个指针域)
A BC
DE
Lchild
data Rchild A
引言
在前面几章里讨论的数据结构都属于线性结构,线 性结构的特点是逻辑结构简单,易于进行查找、插 入和删除等操作,主要用于对客观世界中具有单一 的前驱和后继的数据关系进行描述。而现实中的许 多事物的关系并非如此简单,如人类社会的族谱、 各种社会组织机构以及城市交通、通讯等,这些事 物中的联系都是非线性的,采用非线性结构进行描 绘会更明确和便利。
-
6.2.2 二叉树的性质
性质3 任何一个二叉树中度为2的结点数目(n2)比 度为0的结点数目(n0)少1,即n2= n0-1。
证明:设二叉树上叶结点数为n0,单分支结点数 为n1,双分支结点数为n2,则总结点数=n0+n1+n2。
在一棵二叉树中,所有结点的分支数(即度数)应 等于单分支结点数加上双分支结点数的2倍,即总的分 支数=n1+2n2。
A
B
C
DE
F
G
注意:二叉树的子树有严格的左右之分,而树 没有。
-
二叉树的子树要区分左子树和右子树,即使只 有一棵子树也要进行区分。这是二叉树与树的 最主要的差别。下面列出了二叉树的5种基本形 态, (c)和(d)是不同的两棵二叉树。
(a)
空二叉树
A
A
A
B
B
(b)
只有根的 二叉树
(c)
根和左子树
(d)
3)树中的结点,可以有零个或多个孩子结点;
4) 没有孩子的结点称为叶子结点,或终端结点;
5)除根外的其他结点,都存在唯一一条从根到该结点的路径;
-
树的基本术语
A
B
C
D
E F G HI J
KL
M
树的结点:包含一个数据元素及若干指向子树的分支;
孩子结点:结点的子树的根称为该结点的孩子;
父结点:B 是A的孩子,则A是B的父亲;
-
6.1 树
树是n个结点的有限集合(可以是空集),在任一棵非空树中: (1)有且仅有一个称为根的结点。 (2)其余结点可分为互不相交的子集,而且这些子集本身又 是一棵树,称为根的子树。
B
EF
K
L
A
C
D
G HI J
M
-
A
B
C
D
E F G HI J
从逻辑结构看:
KL
M
1)树中只有树根没有父结点;
2)除根外,其余结点都有且仅一个父结点;
根和右子树
二叉- 树的5种基本形式
A
B
C
(e)
根和左右子树
6.2.2 二叉树的性质
A
B
C
D
EF G
• 性质1
H IJ
K
➢ 在二叉树的第i层上至多有2i-1个结点
• 性质2
➢ 深度为k的二叉树至多有2k-1个结点
• 性质3
➢任何一个二叉树中度为2的结点数目(n2)比度为0的结点 数目(n0)少1,即n2= n0-1。
完全二叉树
-
6.2.3 二叉树的顺序存储
二叉树的顺序存储指的是用元素在数组中的下标表 示一个结点与其孩子和父结点的关系.
完全二叉Biblioteka Baidu的顺序存储
A
B
C
ABCDE F
1 2 3 4 5 6 7 8 9 10 11 12
DEF
#define MAX_TREE_SIZE 100 typedef TelemType SqBiTree[MAX_TREE_SIZE]; SqBiTree bt;
兄弟结点:同一双亲的孩子结点;
堂兄弟结点:其父结点在同一层上的结点;
祖先结点: 从根到该结点所经分支上的所有结点;
子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙;
结点的度: 结点的孩子数目
-
树的基本运算
找树的根结点 求树的高度 找指定结点的父结点 找指定结点的孩子结点 在树中插入、删除一个结点 遍历树 ......
∧B∧
root C
FG
∧D∧
E
typedef struct BiTNode{ TElemType data; struct BiTNode *Lchild,*Rchild;
所谓非线性结构,是指在该结构中至少存在一个数 据元素,有两个或两个以上的直接前驱(或直接后 继)元素。树结构和图结构是非常重要的非线性结 构。
-
第六章 树和二叉树
本章内容
6.1 树的定义和基本术语 6.2 二叉树
6.2.1 二叉树的定义及基本运算 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换及遍历 6.6 赫夫曼树及应用 6.6.1 赫夫曼树(最优二叉树) 6.6.2 赫夫曼编码
(d)
高度为3的完全二叉树
-
满二叉树和完全二叉树
1
2
4
56
3 7
1
2
3
4
5
高度为3的满二叉树
高度为3的一个完全二叉树
-
二叉树的性质(续)
• 性质4
➢ 一个有n个结点的完全二叉树的高度H=[log(n)]+1。
证明: 设具有n个结点的完全二叉树的深度为h ,则根据性质3:
深度为h的二叉树至多有2h-1个结点,因此,n <= 2h-1 另外,深度为h的完全二叉树的结点数一定大于2h-1-1, 即n >=2h-1 综上, 2h-1 <= n < 2h,或
由于二叉树中除根结点以外,每个结点都有惟一 的一个分支指向它,因此二叉树中:总的分支数=总 结点数-1。
由上述三个等式可得:n1+2n2=n0+n1+n2-1 即:n0=n2+1
-
满二叉树和完全二叉树
高度为3的满二叉树
-
高度为3的一个完全二叉树 高度为3的一个完全二叉树
完全二叉树
(a)
(b)
(c)
B EF KL
A
C
D
G HI J
M
-
树的表示
A
EB
KL F
D
HI
MJ
C
G
B
EF
K
L
A
C
D
G HI J
M
(A(B(E(k,L),F),C(G),D(H(M),I(),J())))
(a)
(b)
-
6.2 二叉树
二叉树的定义:二叉树要么为空,要么由根结 点、左子树和右子树组成。左、右子树本身也 是二叉树。
h-1 <= log2n < h 即 h = log2n+1 或log2n+1 证毕。
-
二叉树的性质(续)
• 性质5 ➢ 完全二叉树中的某结点编号为i,则
1) 若有左孩子,则左孩编号为2i 2)若有右孩子,则右孩子结点编号为2i+1 3)若有双亲,则双亲结点编号为[i/2]
1
2
4
5
3
6
7
8
9 10 11
二叉树的顺序存储
非完全二叉树的顺序存储
A BC
ABC
DE
FG
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
DE
FG
非完全二叉树不适合进行顺序存储
-
二叉树的链式存储
一般用二叉链表存储二叉树(每个结点有两个指针域)
A BC
DE
Lchild
data Rchild A
引言
在前面几章里讨论的数据结构都属于线性结构,线 性结构的特点是逻辑结构简单,易于进行查找、插 入和删除等操作,主要用于对客观世界中具有单一 的前驱和后继的数据关系进行描述。而现实中的许 多事物的关系并非如此简单,如人类社会的族谱、 各种社会组织机构以及城市交通、通讯等,这些事 物中的联系都是非线性的,采用非线性结构进行描 绘会更明确和便利。
-
6.2.2 二叉树的性质
性质3 任何一个二叉树中度为2的结点数目(n2)比 度为0的结点数目(n0)少1,即n2= n0-1。
证明:设二叉树上叶结点数为n0,单分支结点数 为n1,双分支结点数为n2,则总结点数=n0+n1+n2。
在一棵二叉树中,所有结点的分支数(即度数)应 等于单分支结点数加上双分支结点数的2倍,即总的分 支数=n1+2n2。
A
B
C
DE
F
G
注意:二叉树的子树有严格的左右之分,而树 没有。
-
二叉树的子树要区分左子树和右子树,即使只 有一棵子树也要进行区分。这是二叉树与树的 最主要的差别。下面列出了二叉树的5种基本形 态, (c)和(d)是不同的两棵二叉树。
(a)
空二叉树
A
A
A
B
B
(b)
只有根的 二叉树
(c)
根和左子树
(d)
3)树中的结点,可以有零个或多个孩子结点;
4) 没有孩子的结点称为叶子结点,或终端结点;
5)除根外的其他结点,都存在唯一一条从根到该结点的路径;
-
树的基本术语
A
B
C
D
E F G HI J
KL
M
树的结点:包含一个数据元素及若干指向子树的分支;
孩子结点:结点的子树的根称为该结点的孩子;
父结点:B 是A的孩子,则A是B的父亲;
-
6.1 树
树是n个结点的有限集合(可以是空集),在任一棵非空树中: (1)有且仅有一个称为根的结点。 (2)其余结点可分为互不相交的子集,而且这些子集本身又 是一棵树,称为根的子树。
B
EF
K
L
A
C
D
G HI J
M
-
A
B
C
D
E F G HI J
从逻辑结构看:
KL
M
1)树中只有树根没有父结点;
2)除根外,其余结点都有且仅一个父结点;
根和右子树
二叉- 树的5种基本形式
A
B
C
(e)
根和左右子树
6.2.2 二叉树的性质
A
B
C
D
EF G
• 性质1
H IJ
K
➢ 在二叉树的第i层上至多有2i-1个结点
• 性质2
➢ 深度为k的二叉树至多有2k-1个结点
• 性质3
➢任何一个二叉树中度为2的结点数目(n2)比度为0的结点 数目(n0)少1,即n2= n0-1。
完全二叉树
-
6.2.3 二叉树的顺序存储
二叉树的顺序存储指的是用元素在数组中的下标表 示一个结点与其孩子和父结点的关系.
完全二叉Biblioteka Baidu的顺序存储
A
B
C
ABCDE F
1 2 3 4 5 6 7 8 9 10 11 12
DEF
#define MAX_TREE_SIZE 100 typedef TelemType SqBiTree[MAX_TREE_SIZE]; SqBiTree bt;
兄弟结点:同一双亲的孩子结点;
堂兄弟结点:其父结点在同一层上的结点;
祖先结点: 从根到该结点所经分支上的所有结点;
子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙;
结点的度: 结点的孩子数目
-
树的基本运算
找树的根结点 求树的高度 找指定结点的父结点 找指定结点的孩子结点 在树中插入、删除一个结点 遍历树 ......
∧B∧
root C
FG
∧D∧
E
typedef struct BiTNode{ TElemType data; struct BiTNode *Lchild,*Rchild;
所谓非线性结构,是指在该结构中至少存在一个数 据元素,有两个或两个以上的直接前驱(或直接后 继)元素。树结构和图结构是非常重要的非线性结 构。
-
第六章 树和二叉树
本章内容
6.1 树的定义和基本术语 6.2 二叉树
6.2.1 二叉树的定义及基本运算 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换及遍历 6.6 赫夫曼树及应用 6.6.1 赫夫曼树(最优二叉树) 6.6.2 赫夫曼编码
(d)
高度为3的完全二叉树
-
满二叉树和完全二叉树
1
2
4
56
3 7
1
2
3
4
5
高度为3的满二叉树
高度为3的一个完全二叉树
-
二叉树的性质(续)
• 性质4
➢ 一个有n个结点的完全二叉树的高度H=[log(n)]+1。
证明: 设具有n个结点的完全二叉树的深度为h ,则根据性质3:
深度为h的二叉树至多有2h-1个结点,因此,n <= 2h-1 另外,深度为h的完全二叉树的结点数一定大于2h-1-1, 即n >=2h-1 综上, 2h-1 <= n < 2h,或
由于二叉树中除根结点以外,每个结点都有惟一 的一个分支指向它,因此二叉树中:总的分支数=总 结点数-1。
由上述三个等式可得:n1+2n2=n0+n1+n2-1 即:n0=n2+1
-
满二叉树和完全二叉树
高度为3的满二叉树
-
高度为3的一个完全二叉树 高度为3的一个完全二叉树
完全二叉树
(a)
(b)
(c)
B EF KL
A
C
D
G HI J
M
-
树的表示
A
EB
KL F
D
HI
MJ
C
G
B
EF
K
L
A
C
D
G HI J
M
(A(B(E(k,L),F),C(G),D(H(M),I(),J())))
(a)
(b)
-
6.2 二叉树
二叉树的定义:二叉树要么为空,要么由根结 点、左子树和右子树组成。左、右子树本身也 是二叉树。
h-1 <= log2n < h 即 h = log2n+1 或log2n+1 证毕。
-
二叉树的性质(续)
• 性质5 ➢ 完全二叉树中的某结点编号为i,则
1) 若有左孩子,则左孩编号为2i 2)若有右孩子,则右孩子结点编号为2i+1 3)若有双亲,则双亲结点编号为[i/2]
1
2
4
5
3
6
7
8
9 10 11