第5章树和二叉树4资料

合集下载

第5章 树与二叉树

第5章  树与二叉树
20
树的抽象数据类型的定义
基本操作: InitTree(Tree):将Tree初始化为一棵空树。 DestoryTree(Tree):销毁树Tree。 CreateTree(Tree): 创建树Tree。 TreeEmpty(Tree) : 若 Tree 为 空 , 则 返 回 TRUE,否则返回FALSE。 Root(Tree):返回树Tree的根。 Parent(Tree,x):树Tree存在,x是Tree中的某 个结点。若x为非根结点,则返回它的双亲,否 则返回“空”。
27
第五章 树和二叉树
树的定义与基本概念 二叉树(Binary Tree)
二叉树的定义与基本操作 二叉树的性质 二叉树的存储结构
二叉树的遍历与线索化 树、森林和二叉树的关系 哈夫曼树及其应用 要点小结
28
二叉树的性质
性质1:在二叉树的第i层上至多有2i-1个结点 (i≥1)。 证明:归纳基础:当i=1时,整个二叉树只有 一根结点,此时2i-1=20=1,结论成立。
『数据结构 ·DATA STRUCTURES』
第五章 树和二叉树
第五章 树和二叉树
本章要求
熟练掌握二叉树的结构特性(五个性质),了解相应的证明 方法; 熟悉二叉树的各种存储结构的特点及适用范围; 遍历二叉树是二叉树各种操作的基础,熟练掌握各种遍历 策略的递归算法,了解其非递归算法; 熟悉树的各种存储结构及其特点,掌握树和森林与二叉树 之间的相互转换方法; 了解Huffman树的特性,掌握建立Huffman树和Huffman 编码的算法。
4
Organization structure
5
数据结构的内容
逻辑结构
指数据元素之间的逻辑关系 描述。
数据结构的形式定义为:

数据结构第5章课件 中国石油大学(华东)

数据结构第5章课件 中国石油大学(华东)
leftChild data rightChild
二叉链表
leftChild
data rightChild
22
二叉树的链表表示(三叉链表)
每个结点增加一个指向双亲的指针parent,使 得查找双亲也很方便。
leftChild data parent rightChild
三叉链表
data
leftChild
27
BinTreeNode *LeftChild (BinTreeNode *current ) { return (current != NULL )? current->leftChild :NULL; } BinTreeNode *RightChild (BinTreeNode *current ) { return ( current!= NULL) ? current->rightChild : NULL; } int Height( ){return Height(root);} int Size( ){return Size(root);} BinTreeNode *GetRoot ( ) const { return root; } void preOrder( ) {preOrder(root);} //前序遍历 void inOrder( ) {inOrder(root);} //中序遍历 void postOrder( ) {postOrder(root);} //后序遍历 void levelOrder( ) ; // 不需要递归,所以直接对外接 口调用即可。层序遍历 28
b
f
c
d
g
6
e
a
b.嵌套集合表示法: b 根据树的集合定义,写出集合划分。 { a, {b,{e},{f}}, {c}, {d,{g}} } e c d

第五章树和二叉树-资料.ppt

第五章树和二叉树-资料.ppt
例如树t中,A是其它各结点的祖先;C是E,H,I,J的祖先。
➢ 路径,路径长度
如果x是y的一个祖先,又有x=x0,x1,…,xn=y, 满足xi(i=0,1,…,n-1)为xi+1的父结点,则 称x0,x1,…,xn为从x到y的一条路径。n称为这 条路径的长度。路径中相邻的两个结点可以表示成 一条边。
(1)有且仅有一个特别标出的称为根的 结点; (2)除根结点外,其余结点可分为m(m>=0)
个互不相交非空的有限集T1, T2, …, Tm, 其中 每一个集合本身又是一棵树,称为根的子树 (Subtree)。
空树:不包括任何结点的树。
张乃孝 算法与数据结构——C语言 描述
7
树结构的特点:
(1)树的根的结点没前驱结点,除了根结点之外 的所有结点都有且只有一个前驱结点;
RF={<root, ri> | i=1,2,…,m, m>0}
张乃孝 算法与数据结构——C语言 描述
15
5.1.4 树的基本运算
• 创建一棵空树
Tree createTree( Node p, Tree t1, Tree t2, …, Tree ti ) i=1, 2, 3, …
• 判断某棵树是否为空
例如树t中A,C,E,I,J是从A到J的一条路径,其长度为4。
张乃孝 算法与数据结构——C语言 描述
11
➢ 结点的层数
规定根的层数为0,其余结点的层数等于其父母结 点的层数加1。
例如t中,0层的结点是A,1层的结点有B,C,D,4层的结 点是J。
➢ 树的深度或高度
树中结点的最大层数称为树的深度或树的高度。
➢ 结点的次序
在有序树中可以从左到右地规定结点的次序。按从 左到右的顺序,我们可以把一个结点的最左边的子 结点简称为最左子结点,或直接称为长子,而把长 子右边的结点称为次子。

《数据结构与算法设计》第5章 树

《数据结构与算法设计》第5章 树

5.2.2 二叉树的性质
➢ 满二叉树和完全二叉树
满二叉树是指深度为h且节点数取得最大值2h-1的二叉树。 如果一棵深度为h的二叉树,除第h层外,其他每层的节点数 都达到最大,且最后一层的节点自左而右连续分布,这样的二 叉树称为完全二叉树。
5.2.2 二叉树的性质
5.2.2 二叉树的性质
性质6 对含有n个节点的完全二叉树自上而下、同一层从左往右 对节点编号0,1,2,…,n-1,则节点之间存在以下关系: (1)若i=0,则节点i是根节点,无双亲;若i>0,则其双亲节 点的编号为i/2-1; (2)若2×i +1≤n,则i的左孩子编号为2×i+1; (3)若2×i+2≤n,则i的右孩子编号为2×i+2; (4)若i>1且为偶数,则节点i是其双亲的右孩子,且有编号为 i-1的左兄弟; (5)若i<n-1且为奇数,则节点i是其双亲的左孩子,且有编号 为i+1的右兄弟。
5.3.3 二叉树的二叉链表类模板定义
//根据二叉树的先序遍历序列和中序遍历序列创建以r为根的二叉树
void CreateBinaryTree(BTNode<DataType> * &r, DataType pre[], DataType
in[], int preStart, int preEnd, int inStart, int inEnd); int Height(BTNode<DataType> *r); //求以r为根的二叉树高度 //求以r为根的二叉树中叶子节点数目
5.1.2 树的术语
(9)节点的层次:从根节点开始,根为第一层,根的孩子为 第二层,根的孩子的孩子为第三层,依次类推,树中任一节 点所在的层次是其双亲节点所在的层次数加1。 (10)堂兄弟:双亲在同一层的节点互为堂兄弟。

第5章 树和二叉树共148页文档

第5章 树和二叉树共148页文档
5.2 树的存储结构
实现树的存储结构,关键是什么? 如何表示树中结点之间的逻辑关系。
什么是存储结构? 数据元素以及数据元素之间的逻辑关系在存储器 中的表示。
树中结点之间的逻辑关系是什么?
思考问题的出发点:如何表示结点的双亲和孩子
5.2 树的存储结构
双亲表示法
数据结构(C++版)
基本思想:用一维数组来存储树的各个结点(一般 按层序存储),数组中的一个元素对应树中的一个 结点,包括结点的数据信息以及该结点的双亲在数 组中的下标。
树的双亲表示法实质上是一个静态链表。
数据结构(C++版)
5.2 树的存储结构
双亲表示法
A
B
C
DEF G H
I
下标 data
0A
1B
2C
3D
4E
5F
6G
7H
8
I
parent
-1 0 0 1 1 1 2 2 4
data parent
data:存储树中结点的数据信息 parent:存储该结点的双亲在数组中的下标
5.2 树的存储结构
双亲表示法
数据结构(C++版)
data parent
template <class T> struct PNode {
T data; //数据域 int parent; //指针域,双亲在数组中的下标 };
数据结构(C++版)
树的基本术语
同构:对两棵树,若通过对结点适当地重命名, 就可以使这两棵树完全相等(结点对应相等,结 点对应关系也相等),则称这两棵树同构。
A
B
C
D
E
A
DEF G
GBF C
5.1 树的逻辑结构

数据结构与算法第5章课后答案

数据结构与算法第5章课后答案

page: 1The Home of jetmambo - 第 5 章树和二叉树第 5 章树和二叉树(1970-01-01) -第 5 章树和二叉树课后习题讲解1. 填空题⑴树是n(n&ge;0)结点的有限集合,在一棵非空树中,有()个根结点,其余的结点分成m (m>0)个()的集合,每个集合都是根结点的子树。

【解答】有且仅有一个,互不相交⑵树中某结点的子树的个数称为该结点的(),子树的根结点称为该结点的(),该结点称为其子树根结点的()。

【解答】度,孩子,双亲⑶一棵二叉树的第i(i&ge;1)层最多有()个结点;一棵有n(n&gt;0)个结点的满二叉树共有()个叶子结点和()个非终端结点。

【解答】2i-1,(n+1)/2,(n-1)/2【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。

⑷设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是(),最小值是()。

【解答】2h -1,2h-1【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。

⑸深度为k的二叉树中,所含叶子的个数最多为()。

【解答】2k-1【分析】在满二叉树中叶子结点的个数达到最多。

⑹具有100个结点的完全二叉树的叶子结点数为()。

【解答】50【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。

⑺已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。

则该树中有()个叶子结点。

【解答】12【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。

⑻某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是()。

第5章 树和二叉树

第5章 树和二叉树
A
B A
C
D
E
F
G
H
I
J
K
L
T1
T2
M
2015年10月20日
T3
树的其它表示方式
A D K L F C G E B H M J I
A
A B E K L F C G
B C D
嵌套集合
E
D H M
F
G
H
I
J
I J
K
L
M
凹入表示
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
广义表
2015年10月20日
北京林业大学信息学院
2015年10月20日
二叉树的链式存储
PARENT
lchild
data
rchild
DATA
lchild
data
parent rchild
LCHILD
RCHILD
北京林业大学信息学院
2015年10月20日
二叉链表
A A ^ B D lchild data rchild
B
C
E
G
F
二叉树的五种不同形态
2015年10月20日
练习
具有3个结点的二叉树可能有几种不同形态?普通树呢? 5种/2种
2015年10月20日
二叉树的抽象数据类型定义
ADT BinaryTree{ 数据对象D: D是具有相同特性的数据元素的集合。 数据关系R: 若D=Φ,则R= Φ ; 若D≠Φ,则R= {H};存在二元关系: ① root 唯一 //关于根的说明 ② Dj∩Dk= Φ //关于子树不相交的说明 ③ …… //关于数据元素的说明 ④ …… //关于左子树和右子树的说明 //至少有20个 基本操作 P: }ADT BinaryTree

树和二叉树这章所有知识点总结

树和二叉树这章所有知识点总结

树和二叉树这章所有知识点总结1.树的定义及基本概念树是一种非线性的数据结构,它由节点和边组成。

节点之间通过边连接,形成一种层次关系。

树的基本概念包括根节点、子节点、父节点、叶节点、深度等。

2.二叉树的定义及基本性质二叉树是一种特殊的树结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。

若左子节点和右子节点都为空,则该节点为叶节点。

基本性质包括二叉树的遍历方式、二叉树的性质和二叉树的存储方式等。

2.1二叉树的遍历二叉树的遍历方式包括前序遍历、中序遍历和后序遍历。

-前序遍历:先遍历根节点,然后递归遍历左子树,最后递归遍历右子树。

-中序遍历:先递归遍历左子树,然后遍历根节点,最后递归遍历右子树。

-后序遍历:先递归遍历左子树,然后递归遍历右子树,最后遍历根节点。

2.2二叉树的性质-满二叉树:一棵二叉树的所有非叶节点都有两个子节点,并且所有叶节点都在同一层上。

-完全二叉树:一棵二叉树的叶节点从左到右依次填入,除最后一层外,其他层的节点数达到最大。

2.3二叉树的存储方式二叉树的存储方式有两种:顺序存储和链式存储。

-顺序存储:使用数组来存储二叉树的节点数据,节点之间的关系通过数组下标来表示。

-链式存储:使用节点对象来存储二叉树的节点数据,每个节点对象包含数据以及左右子节点的引用。

3.二叉搜索树二叉搜索树(B in ary S ea rc hT re e,简称BS T)是一种特殊的二叉树,它的左子树上的所有节点值都小于根节点的值,右子树上的所有节点值都大于根节点的值。

二叉搜索树具有以下特性:-左子树上的所有节点值小于根节点的值,右子树上的所有节点值大于根节点的值。

-左右子树都是二叉搜索树。

4.平衡二叉树平衡二叉树(Ba la nc e dB in ar yT re e)是一种特殊的二叉树,它的左右子树的高度差不超过1,即任意节点的左右子树的高度差绝对值不超过1。

平衡二叉树的好处是可以保持树的平衡,提高树的操作效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例:构造以W=(5,15,40,30,10)为权的哈夫曼 树。
GH
GH
GH
A
I
I
I
I
B
CD
E FGH I
总结:
由树、森林和二叉树之间的转换方法易知,若二叉 树的根结点有右子树,则转换后是森林;若二叉树 的根结点没有右子树,则转换后是树。
森林的遍历
森林有两种遍历方法: ⑴前序(根)遍历:前序遍历森林即为前序遍历森 林中的每一棵树。 ⑵后序(根)遍历:后序遍历森林即为后序遍历森 林中的每一棵树。
5.5 树、森林与二叉树的转换
是哪些树结构的存储结构?
A∧
B
∧E
∧C
A B
E
C
F
DB
A CD
∧F∧
D∧
GE F G
∧G∧
树和二叉树之间具有对应关系
树和二叉树之间的对应关系
树:兄弟关系
A
B
二叉树:双亲和右孩子
E
C
A
树:双亲和长子
F
DB C D
二叉树:双亲和左孩子
G EF G
树转换为二叉树 A
B
C
1.兄弟加线. D
树转换为二叉树
A
B
C
D
E
F
G
A B
E
C
F
D
G
树转换成的二叉树,对于根来说 其右子树一定为空
A
A
B
CD
B
CD
B
E F G H IE F G H IE F
A
B
CD
E FGH I
A
B
E
C
F
D
GH I
A CD GH I
A
BC D
E
F
G
A
B
E
C
F
D
G
前序遍历
ABEFCDG
树的前序遍历等价于 二叉树的前序遍历!
例:给定4个叶子结点,其权值分别为{2,3,4,7} ,可以构造出形状不同的多个二叉树。
2 34 7 WPL=32
2 3 47
WPL=41
7 4 23
WPL=30
哈夫曼树的特点:
1. 权值越大的叶子结点越靠近根结点,而权值越小的 叶子结点越远离根结点。
2. 只有度为0(叶子结点)和度为2(分支结点)的 结点,不存在度为1的结点.
⑶ 删除与加入:在F中删除作为左、右子树的两棵
二叉树,并将新建立的二叉树加入到F中;
⑷ 重复⑵、⑶两步,当集合F中只剩下一棵二叉树
时,这棵二叉树便是哈夫曼树。
W={2,3,4,5} 哈夫曼树的构造过程
第1步:初始化
24 5 3
第2步:选取与合并 第3步:删除与加入
5 23 45 5
23
W={2,3,4,5} 哈夫曼树的构造过程
2 34 7 WPL=32
2 3 47
WPL=41
7 4 23
WPL=30
哈夫曼算法基本思想: ⑴ 初始化:由给定的n个权值{w1,w2,…,wn}构造
n棵只有一个根结点的二叉树,从而得到一个二叉树
集合F={T1,T2,…,Tn};
⑵ 选取与合并:在F中选取根结点的权值最小的两棵
二叉树分别作为左、右子树构造一棵新的二叉树, 这棵新二叉树的根结点的权值为其左、右子树根结 点的权值之和;
重复第2步
45 5
23 9
45
重复第3步
9
5
4 52 3
W={2,3,4,5} 哈夫曼树的构造过程
重复第2步
9
5
4 52 3
重复第3步
14
9
5
4 52 3
小结:
对于具有n个叶子结点并且权值为w1,w2,…,wn 的二叉树来说,其形态有许多种,其中能称之为哈 夫曼树的二叉树也并不唯一。但其最小的WPL是确 定的。
后序遍历第一棵树的子树 森林;
访问 F 的第一棵树的根结 点;
后序遍历其它树组成的森 林。
T1 A T2 F T3 H
BCD G I J
E
K
后序遍历序列 B C E D A G F KIJ H
森林的遍历
森林的遍历序列与对应二叉树的遍历序列之间具有 对应关系 ⑴森林的前序遍历等价于二叉树的前序遍历。 ⑵森林的后序遍历等价于二叉树的中序遍历。
2.保留双亲与第一孩 子连线,删去与其他孩 子的连线. 3.顺时针转动,使之层 次分明.
树转换为二叉树
⑴加线——树中所有相邻兄弟之间加一条连线。
⑵去线——对树中的每个结点,只保留它与第一个 孩子结点之间的连线,删去它与其它孩子结点之间 的连线。
⑶层次调整——以根结点为轴心,将树顺时针转动 一定的角度,使之层次分明。
5.6 哈夫曼树及哈夫曼编码
相关概念
叶子结点的权值:对叶子结点赋予的一个有意义的数 值量。
二叉树的带权路径长度:设二叉树具有n个带权值的
叶子结点,从根结点到各个叶子结点的路径长度与 相应叶子结点权值的乘积之和。 记为:
n
WPL
=
k=1wk lk
从根结点到第k个叶子的路径长度
第k个叶子的权值;
哈夫曼树:给定一组具有确定权值的叶子结点,带权 路径长度最小的二叉树。也称最优二叉树。
E
F
G
树转换为二叉树
A
1.兄弟加线.
2.保留双亲与第一孩
B
C
D 子连线,删去与其他孩
子的连线.
E
F
G
树转换为二叉树 A
B
CD
E
F
G
1.兄弟加线.
2. 保 留 双 亲 与 第 一 孩子连线,删去与其 他孩子的连线. 3. 顺 时 针 转 动 , 使 之 层次分明.
树转换为二叉树 A
B
E
C
F
D
G
1.兄弟加线.
前序遍历
ABEFCDG
A
BC D
E
FG
A
B
E
C
F
D
G
后序遍历
EFBCGDA
树的后序遍历等价于 二叉树的中序遍历!
中序遍历
EFBCGDA
森林转换为二叉树
⑴ 将森林中的每棵树转换成二叉树;
⑵ 从第二棵二叉树开始,依次把后一棵二叉树的根 结点作为前一棵二叉树根结点的右孩子,当所有二 叉树连起来后,此时所得到的二叉树就是由森林转 换得到的二叉树。
A
C
G
H
I
B DEF
J
A B
C D
E F
G H
I K
A
B
C
D
G
EH FI
K
A
E
G
A
E
G
B
C
D
FH I B
F
C J
D
I
J
A
E
G
A
B
F
H
B
E
C
I
G CF
D J
DH
I
森林转换成的二叉树,其根结点
J
有右子树
二叉树转换为树或森林
⑴ 加线——若某结点x是其双亲y的左孩子,则把结点x 的右孩子、右孩子的右孩子、……,都与结点y用线连
(1)前序遍历: 若森林 F 为空, 返回;否则
T1 A T2 F T3 H
访问 F 的第一棵树的根结点;
前序遍历第一棵树的子树森 B C D G I J
林; 前序遍历其它树组成的森林。
E
K
前序遍历序列 A B C D E F G H I K J
(2)后序遍历: 若森林 F 为空,返回;否则
起来;
⑵ 去线——删去原二叉树中所有的双亲结点与右孩子结 点的连线;
⑶ 层次调整——整理由⑴、⑵两步所得到的树或森林, 使之层次分明。
A
A
B C
E
F
G
加线
B C
E
F
G
DH I
D
H
去线
I
A
A
E
BC D F
G
B
层次调整
C
E
F
G
HI
H
D
I
B E
F
A
C D
A B
E
C
F
D
B E
F
A B
C
E
DF
A
C D
GH
相关文档
最新文档