树的遍历和哈夫曼树
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/7/20 北京化工大学信息学院 数据结构 9
性质4 具有 n (n 0) 个结点的完全二叉树 的高度为 log2(n+1) -1 证明:设完全二叉树的高度为 h,则有
2h - 1 < n 2h+1 - 1
上面h层结点数 包括第h层的最大结点数
变形 2h < n+1 2h+1 取对数 h < log2(n+1) h+1 因此有 log2(n+1) = h+1
0123456789
完全二叉树 的顺序表示
0123 4567 8 9
一般二叉树 的顺序表示
二叉树的链表表示
leftChild data rightChild
data
leftChild
rightChild
二叉链表
2020/7/20 北京化工大学信息学院 数据结构 13
二叉树的链表表示
leftChild data parent rightChild
parent
data
leftChild
rightChild
三叉链表
2020/7/20 北京化工大学信息学院 数据结构 14
root A
root A
root A
B
B
B
C D C D C D
E F E F E F
二叉树 二叉链表 三叉链表
二叉树链表表示的示例
2020/7/20 北京化工大学信息学院 数据结构 15
root A B CD EF
data parent leftChild rightChild
0 A -1 1 -1
1B 0 2
3
2 C 1 -1 -1
3D 1 4
5
4 E 3 -1 -1
5 F 3 -1 -1
三叉链表的静态结构
2020/7/20 北京化工大学信息学院 数据结构 16
二叉树的定义
typedef char TreeData; //树结点数据类型
h = log2(n+1) -1
2020/7/20 北京化工大学信息学院 数据结构 10
性质5 如将一棵有n个结点的完全二叉树自顶向
下,同一层自左向右连续给结点编号0, 1, 2, …,
n-1,则有以下关系:
若i = 0, 则 i 无双亲
若i > 0, 则 i 的双亲为(i -1)/2
若2*i+1 < n, 则 i 的左子女为 2*i+1,若2*i+2
如果 n = 0,称为空树;如果 n > 0,则 ▪ 有一个特定的称之为根(root)的结点,
它只有直接后继,但没有直接前驱; ▪ 除根以外的其它结点划分为 m (m 0)
个 互不相交的有限集合T0, T1, …, Tm-1,每 个集合又是一棵树,并且称之为根的子树。
2020/7/20 北京化工大学信息学院 数据结构 3
数据结构
北京化工大学 信息科学与技术学院计算机系
史晟辉 shishenghui@sina.com shish@mail.buct.edu.cn
树和森林的概念 二叉树 二叉树遍历 二叉树的计数 树与森林 哈夫曼树
2020/7/20 北京化工大学信息学院 数据结构 2
树和森林的概念
树的定义 树是由 n (n 0) 个结点组成的有限集合。
二叉树的五种不同形态
2020/7/20 北京化工大学信息学院 数据结构 6
二叉树的性质
性质1 若二叉树的层次从0开始, 则在二叉 树的第 i 层最多有 2i 个结点。(i 0)
[证明用数学归纳法] 性质2 高度为 h 的二叉树最多有 2h+1-1个 结点。(h -1)
[证明用求等比级数前k项和的公式] 20 + 21 + 22 + … + 2h = 2h+1-1
2020/7/20 北京化工大学信息学院 数据结构 17
二叉树遍历
二叉树遍历的递归算法 二叉树遍历的应用 二叉树遍历的非递归算法
二叉树遍历
树的遍历就是按某种次序访问树中的结点,要 求每个结点访问一次且仅访问一次。
设访问根结点记作 V 遍历根的左子树记作 L 遍历根的右子树记作 R
< n, 则 i 的右子女为2*i+2
若 i 为偶数, 且i != 0,
0
则其左兄弟为i-1, 若
1
2
i 为奇数, 且i != n-1,
34 56
则其右兄弟为i+1
789
2020/7/20 北京化工大学信息学院 数据结构 11
二叉树的顺序表示
0
1
2
3 4 56
78 9
1 3 67
0 2
45 89
typedef struct node { //树结点定义
TreeData data;
//结点数据域
struct node * leftChild, * rightchild;
//子女指针域
} BinTreeNode;
typedef BinTreeNode * BinTree; //树定义,代表树的根指针
e = 2n2 + n1
总结点与总边数的关系e= n - 1
因此,
n0 = n2 + 1
2020/7/20 北京化工大学信息学院 数据结构 8
定义1 满二叉树 (Full Binary Tree) 定义2 完全二叉树 (Complete Binary Tree)
若设二叉树的高度为h,则共有h+1层。除 第 h 层外,其它各层 (0 h-1) 的结点数都 达到最大个数,第 h 层从右向左连续缺若干 结点,这就是完全二叉树。
BC
D
E F GH I J
1层
height
2层 = 3
KL
M
பைடு நூலகம்
3层
2020/7/20 北京化工大学信息学院 数据结构 5
二叉树 (Binary Tree)
二叉树的定义
一棵二叉树是结点的一个有限集合, 该集合或者为空,或者是由一个根结点加 上两棵分别称为左子树和右子树的、互不 相交的二叉树组成。
L
R
LR
树的特点
每棵子树的根结点有且仅有一个直接前驱,但 可以有0个或多个直接后继。
A
0层
BC
D
E F GH I J
1层
height
2层 = 3
KL
M
3层
2020/7/20 北京化工大学信息学院 数据结构 4
结点 结点的度 分支结点 叶结点
子女 双亲 兄弟
A
祖先 子孙 结点层次
树的度 树高度 森林
0层
2020/7/20 北京化工大学信息学院 数据结构 7
性质3 对任何一棵二叉树, 如果其叶结点
有 n0 个, 度为2的非叶结点有 n2 个, 则有 n0=n2+1
证明:若设度为1的结点有 n1 个,总结点 个数为 n,总边数为 e,则根据二叉树的
定义,
总结点个数
n = n0 + n1 + n2
总边数
性质4 具有 n (n 0) 个结点的完全二叉树 的高度为 log2(n+1) -1 证明:设完全二叉树的高度为 h,则有
2h - 1 < n 2h+1 - 1
上面h层结点数 包括第h层的最大结点数
变形 2h < n+1 2h+1 取对数 h < log2(n+1) h+1 因此有 log2(n+1) = h+1
0123456789
完全二叉树 的顺序表示
0123 4567 8 9
一般二叉树 的顺序表示
二叉树的链表表示
leftChild data rightChild
data
leftChild
rightChild
二叉链表
2020/7/20 北京化工大学信息学院 数据结构 13
二叉树的链表表示
leftChild data parent rightChild
parent
data
leftChild
rightChild
三叉链表
2020/7/20 北京化工大学信息学院 数据结构 14
root A
root A
root A
B
B
B
C D C D C D
E F E F E F
二叉树 二叉链表 三叉链表
二叉树链表表示的示例
2020/7/20 北京化工大学信息学院 数据结构 15
root A B CD EF
data parent leftChild rightChild
0 A -1 1 -1
1B 0 2
3
2 C 1 -1 -1
3D 1 4
5
4 E 3 -1 -1
5 F 3 -1 -1
三叉链表的静态结构
2020/7/20 北京化工大学信息学院 数据结构 16
二叉树的定义
typedef char TreeData; //树结点数据类型
h = log2(n+1) -1
2020/7/20 北京化工大学信息学院 数据结构 10
性质5 如将一棵有n个结点的完全二叉树自顶向
下,同一层自左向右连续给结点编号0, 1, 2, …,
n-1,则有以下关系:
若i = 0, 则 i 无双亲
若i > 0, 则 i 的双亲为(i -1)/2
若2*i+1 < n, 则 i 的左子女为 2*i+1,若2*i+2
如果 n = 0,称为空树;如果 n > 0,则 ▪ 有一个特定的称之为根(root)的结点,
它只有直接后继,但没有直接前驱; ▪ 除根以外的其它结点划分为 m (m 0)
个 互不相交的有限集合T0, T1, …, Tm-1,每 个集合又是一棵树,并且称之为根的子树。
2020/7/20 北京化工大学信息学院 数据结构 3
数据结构
北京化工大学 信息科学与技术学院计算机系
史晟辉 shishenghui@sina.com shish@mail.buct.edu.cn
树和森林的概念 二叉树 二叉树遍历 二叉树的计数 树与森林 哈夫曼树
2020/7/20 北京化工大学信息学院 数据结构 2
树和森林的概念
树的定义 树是由 n (n 0) 个结点组成的有限集合。
二叉树的五种不同形态
2020/7/20 北京化工大学信息学院 数据结构 6
二叉树的性质
性质1 若二叉树的层次从0开始, 则在二叉 树的第 i 层最多有 2i 个结点。(i 0)
[证明用数学归纳法] 性质2 高度为 h 的二叉树最多有 2h+1-1个 结点。(h -1)
[证明用求等比级数前k项和的公式] 20 + 21 + 22 + … + 2h = 2h+1-1
2020/7/20 北京化工大学信息学院 数据结构 17
二叉树遍历
二叉树遍历的递归算法 二叉树遍历的应用 二叉树遍历的非递归算法
二叉树遍历
树的遍历就是按某种次序访问树中的结点,要 求每个结点访问一次且仅访问一次。
设访问根结点记作 V 遍历根的左子树记作 L 遍历根的右子树记作 R
< n, 则 i 的右子女为2*i+2
若 i 为偶数, 且i != 0,
0
则其左兄弟为i-1, 若
1
2
i 为奇数, 且i != n-1,
34 56
则其右兄弟为i+1
789
2020/7/20 北京化工大学信息学院 数据结构 11
二叉树的顺序表示
0
1
2
3 4 56
78 9
1 3 67
0 2
45 89
typedef struct node { //树结点定义
TreeData data;
//结点数据域
struct node * leftChild, * rightchild;
//子女指针域
} BinTreeNode;
typedef BinTreeNode * BinTree; //树定义,代表树的根指针
e = 2n2 + n1
总结点与总边数的关系e= n - 1
因此,
n0 = n2 + 1
2020/7/20 北京化工大学信息学院 数据结构 8
定义1 满二叉树 (Full Binary Tree) 定义2 完全二叉树 (Complete Binary Tree)
若设二叉树的高度为h,则共有h+1层。除 第 h 层外,其它各层 (0 h-1) 的结点数都 达到最大个数,第 h 层从右向左连续缺若干 结点,这就是完全二叉树。
BC
D
E F GH I J
1层
height
2层 = 3
KL
M
பைடு நூலகம்
3层
2020/7/20 北京化工大学信息学院 数据结构 5
二叉树 (Binary Tree)
二叉树的定义
一棵二叉树是结点的一个有限集合, 该集合或者为空,或者是由一个根结点加 上两棵分别称为左子树和右子树的、互不 相交的二叉树组成。
L
R
LR
树的特点
每棵子树的根结点有且仅有一个直接前驱,但 可以有0个或多个直接后继。
A
0层
BC
D
E F GH I J
1层
height
2层 = 3
KL
M
3层
2020/7/20 北京化工大学信息学院 数据结构 4
结点 结点的度 分支结点 叶结点
子女 双亲 兄弟
A
祖先 子孙 结点层次
树的度 树高度 森林
0层
2020/7/20 北京化工大学信息学院 数据结构 7
性质3 对任何一棵二叉树, 如果其叶结点
有 n0 个, 度为2的非叶结点有 n2 个, 则有 n0=n2+1
证明:若设度为1的结点有 n1 个,总结点 个数为 n,总边数为 e,则根据二叉树的
定义,
总结点个数
n = n0 + n1 + n2
总边数