第6章树和二叉树(一)-打印稿
数据结构PPT第6章树和二叉树
安
徽 理
树的逻辑结构特点
工
大 学 1. 树中只有根结点没有前趋;
2. 除根外,其余结点都有且仅一个前趋;
3. 树的结点,可以有零个或多个后继;
4. 除根外的其它结点,都存在唯一条从
A
根到该结点的路径; 5. 树是一种分支结构。
B
C
D
E
FG H I J
KL
M
安
徽 理
树的应用
工
大 学
▪ 树可表示具有分支结构关系的对象
结论3知,x的右孩子应为2x+1,即2x+1=i,x=(i-1)/2。
故 i的双亲为└i/2┘ 证毕。
安
徽 理
6.2.3 二叉树的存储结构
工
大 学
❖ 顺序存储结构
所谓顺序存储结构,就是用一组连续的存储单元存储二
叉树的数据元素,结点在这个序列中的相互位置能反映出
结点之间的逻辑关系。 二叉树中结点之间的关系就是双亲
例1. 家族族谱
设某家庭有13个成员A、B、C、D、E、F、G、H、I、J
、K、L、M,他们之间的关系可如图所示的树表示。
例2. 单位行政机构的组织关系
A
B
C
D
E
FG H I J
KL
M
安
徽 理
树的应用
工
大 学
▪ 树是常用的数据组织形式
有些应用中数据元素之间并不存在分支结构关系,但是为
了便于管理和使用数据,将它们用树的形式来组织。
A
B
C
D
Ø
E
F
G H ØØØØI J
例如对于B结点而言: bt[2]的双亲为└1/2┘=1,即在bt[1]中 (为A); 其左孩子在bt[2i]=bt[4]中(为D); 其右孩子在bt[2i+1]=bt[5]中(为Ø )。
数据结构(C语言版)严蔚敏第6章 树和二叉树
⑷ 孩子结点、双亲结点、兄弟结点
一个结点的子树的根称为该结点的孩子结点(child) 或子结点;相应地,该结点是其孩子结点的双亲结点 (parent)或父结点。
4
如图6-1(b)中结点B 、C、D是结点A的子结点,而结 点A是结点B 、C、D的父结点;类似地结点E 、F是结 点B的子结点,结点B是结点E 、F的父结点。
这是树的递归定义,即用树来定义树,而只有 一个结点的树必定仅由根组成,如图6-1(a)所示。
2
2 树的基本术语
⑴ 结点(node):一个数据元素及其若干指向其子树的分支。 ⑵ 结点的度(degree) 、树的度:结点所拥有的子树
的棵数称为结点的度。树中结点度的最大值称为树的度。
A
B
C
D
A
E
F G HI J
同一双亲结点的所有子结点互称为兄弟结点。
如图6-1(b)中结点B 、C、D是兄弟结点;结点E 、 F是兄弟结点。
⑸ 层次、堂兄弟结点
规定树中根结点的层次为1,其余结点的层次等于 其双亲结点的层次加1。
若某结点在第l(l≧1)层,则其子结点在第l+1层。
双亲结点在同一层上的所有结点互称为堂兄弟结点。 如图6-1(b)中结点E、F、G、H、I、J。
(a) 只有根结点
K
LM N
图6-1 树的示例形式
(b) 一般的树
3
如图6-1(b)中结点A的度是3 ,结点B的度是2 ,结点 M的度是0,树的度是3 。
⑶ 叶子(left)结点、非叶子结点:树中度为0的
结点称为叶子结点(或终端结点)。相对应地,度不为 0的结点称为非叶子结点(或非终端结点或分支结点)。 除根结点外,分支结点又称为内部结点。
第6章树和二叉树(1)
第6章树和二叉树一、选择题1. 在下述结论中,正确的是()①只有一个结点的二叉树的度为0; ②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A.①②③ B.②③④ C.②④ D.①④2.在一棵三元树中度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为()个A.4 B.5 C.6 D.73.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A. 250 B. 500 C.254 D.505 E.以上答案都不对4. 一个具有1025个结点的二叉树的高h为()A.11 B.10 C.11至1025之间 D.10至1024之间5.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用( )遍历方法最合适。
A.前序 B.中序 C.后序 D.按层次6.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。
A.CBEFDA B. FEDCBA C. CBEDFA D.不定7.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()A.所有的结点均无左孩子B.所有的结点均无右孩子C.只有一个叶子结点D.是任意一棵二叉树8.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序()A.都不相同B.完全相同 C.先序和中序相同,而与后序不同D.中序和后序相同,而与先序不同二、判断题1. 二叉树是度为2的有序树。
2. 完全二叉树一定存在度为1的结点。
3.用树的前序遍历和中序遍历可以导出树的后序遍历。
4.由一棵二叉树的前序序列和后序序列可以唯一确定它。
5.完全二叉树中,若一个结点没有左孩子,则它必是树叶。
三、填空题1.在二叉树中,指针p所指结点为叶子结点的条件是___ ___。
15.设只含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为__ ____,最小结点数为___ ___。
树和二叉树专题知识课件
因为各子树旳遍历和整个二叉树旳遍历方式相同,所以, 各子树旳遍历可递归调用二叉树旳遍历算法。
先序遍历递归算法如下:
void PreOrder ( BiTree *T) { if ( T )
设B为分支总数,则n=B+1 又:分支由度为1和度为2旳结点射出, B=n1+2n2 于是,n=B+1=n1+2n2+1=n0+n1+n2 n0=n2+1
两种特殊形式旳二叉树
满二叉树 —— 一棵深度为k且有2 k-个1结点旳二叉树
特点:每一层上旳结点数都是最大结点数
完全二叉树 —— 深度为k,有n个结点旳二叉树当且仅当其每一种结点 都与深度为k旳满二叉树中编号从1至n旳结点一一相应 特点: 叶子结点只可能在层次最大旳两层上出现 对任一结点,若其右分支下子孙旳最大层次为l,则其 左分支下子孙旳最大层次必为l 或l+1
D HJ M
I
C G
A
B E K
L F C G D H
M I J
(A (B(E(K , L) , F) , C(G) , D(H(M) , I , J)))
树和二叉树
6.1 树旳定义和基本术语 ☞ 6.2 二叉树
6.3 遍历二叉树 6.4 线索二叉树 6.5 树和森林 6.6 哈夫曼树
6.2 二叉树
b cd
a f
g
eh i
j
6.3 遍历二叉树
6.3.1 遍历二叉树
☞ 6.3.2 遍历二叉树旳递归算法
6.3.3 遍历二叉树旳非递归算法 6.3.4 递归算法旳应用(3个算法)
数据结构第6章树和二叉树1
TraverseTree(T, visit());
初始条件:树T存在,visit 是对结点操作的应用函数
操作结果:按某种次序对 T 的每个结点调用函数visit()
一次且至多一次。一旦 visit() 失败,则操
作失败。
{加工型操作}
Assign(&T, cur_e, value);
假设,当i=j时 ,命题成立;即第j层最多有2j-1个结点;
InOrderTraverse (T, Visit( ))——左根右
初始条件:二叉树 T 存在,visit 是对结点操作的应用
函数。
操作结果:中序遍历 T,对每个结点调用函数 Visit 一
次且仅一次。一旦 visit() 失败,则操作失败。
26
引用型操作(续) PostOrderTraverse (T, Visit( ))——左右根 初始条件:二叉树 T 存在,visit 是对结点操作的应用 函数。 操作结果:后序遍历 T,对每个结点调用函数 visit 一 次且仅一次。一旦 visit() 失败,则操作失败。
双亲,否则返回“空”。
LeftChild(T, cur_e); 初始条件:树 T 存在,cur_e 是 T 中某个结点。 操作结果:若 cur_e 是T的非叶子结点,则返回它的
最左孩子,否则返回"空"
13
RightSibling(T, cur_e); 初始条件:树 T 存在,cur_e 是 T 中某个结点 操作结果:若 cur_e 有右兄弟,则返回它的右兄弟,
多个叶子结点 (无后继)
其它数据元素 (一个前驱、多个后继)
2
6.1 树的类型定义
树 是 n (n ≥0 )个结点的有限集 D,当n ≥1 时:
第6章树和二叉树
23
§6.3 遍历二叉树
• 遍历二叉树 • 遍历二叉树的递归与非递归算法 • 表达式求值 • 二叉树的运算举例 • 层序遍历二叉树
计算机科学与技术学院——数据结构
24
§6.3 遍历二叉树
§6.3.2 遍历二叉树的递归与非递归算法(1)
先序遍历二叉树
若二叉树为空,则空操作;否则
根
访问根;
先序遍历左子树;
具有三个结点的树与二叉树
A、三个结点的树有两种不同的形态
B、三个结点的二叉树有五种不同的形态
树型结构的共同特征:层次性、分支性
计算机科学与技术学院——数据结构
10
§6.2 二叉树
§6.2.1 二叉树的定义(3)
二叉树的基本操作
初始化空二叉树 销毁二叉树 创建二叉树 清空二叉树 判断空二叉树 求二叉树深度 求双亲 求左孩子 求右孩子 求左兄弟 求右兄弟 插入子树 删除子树 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 按层次遍历
InitTree(&T); DestroyTree(&T); CreateTree(&T, definition); ClearTree(&T); TreeEmpty(T); TreeDepth(T); parent(T, cur_e); LeftChild(T, cur_e); RightSibling(T, cur_e); InsertChild(&T, &p, i, c); DeleteChild(&T, &p, i); TraverseTree(T, visite());
∧G ∧
三叉链表表示
计算机科学与技术学院——数据结构
第6章树与二叉树-
(1) 设 n1 为二叉树 T 中度为 1 的结点数。n 为二叉树 中总结点数。因为二叉树中所有结点的度均小于或等于 2, 则:n = n0 + n1 + n2 。
(2) 设 B 为二叉树 T 中的分支总数。 从入支的角度看,二叉树中除了根结点外,其余结
点都有一个且仅有一个入支,则:n = B + 1。 从出支的角度看,度为 1 的结点只有一个出支,度
操作也很方便。14ຫໍສະໝຸດ R∧A∧D∧B
∧E∧
C∧
F∧
∧G
∧H
∧K∧
15
6.2 二叉树
二叉树 (binary tree) 是另一种树型结构,它的特点 是每个结点至多只有两棵子树(即二叉树中不存在度大 于 2 的结点),并且,二叉树的子树有左右之分,其次 序不能任意颠倒。
二叉树的逻辑结构 二叉树的基本性质 二叉树的存储结构
操中点作从(,头根直到结到点尾遇除扫见外描无)一双只遍亲 D的T有.p结a惟r点e一En时t双,域亲即,的TT性..pFp质aarr。eenntt =
-61的时结,点便G找、到H了、惟K 一就的是 无结双点亲F的的根G孩结子点。。H K
数组下标 双亲存储结构
0
R -1
1
A0
2
B0
3
C0
4
D1
5
E1
6
data child1 child2 …… childd
其中 d 为树的度。由于树中很多结点的度都小于 d, 所以链表中有很多空链域,空间比较浪费。
设树的度为 k,结点数为 n。若采用同构结点格式, 每个结点具有 k 个固定链域,那么共有 nk 个链域。由 于 n 个结点要有 ( n - 1) 个枝相连,而每枝需要 1 个链 域。因此,这棵树的空链域的个树为: n ( k – 1 ) +1。
第六章树和二叉树
k
k
(第 i层的最大 )结2i点 12数 k 1
i1
i1
❖性质3:对任何一棵二叉树T,如果其终端结点数为n0, 度为2的结点数为n2,则n0=n2+1
证明:n1为二叉树T中度为1的结点数 因为:二叉树中所有结点的度均小于或等于2 所以:其结点总数n=n0+n1+n2 又二叉树中,除根结点外,其余结点都只有一个 分支进入 设B为分支总数,则n=B+1 又:这些分支是由度为1和度为2的结点射出, B=n1+2n2 于是,n=B+1=n1+2n2+1=n0+n1+n2 n0=n2+1
f
gh
4. 嵌套括号表示
a ( b ( d, e ( i, j ),f), c ( g, h ) )
★树的存储结构
※ 1. 双亲表示法
实现:结构数组存放树的结点,每个结点含两个域 数据域:存放结点本身信息 双亲域:指示本结点的双亲结点在数组中位置
特点:找双亲容易,找孩子难
typedef struct node { datatype data;
int parent; }JD; JD t[M];
a
b
c
d
e
f
gh i
如何找孩子结点
0号单元不用或
存结点个数
data
parent
00
9
1
a
0
2
b
1
3
c
1
4
d
2
5
e
2
6f
3
7g
5
8h
5
9i
5
※ 2. 孩子表示法
树和二叉树.
2019/8/2
第六章 树和二叉树
5
树的表示
树形表示法: 最常用的一种表示法。结点之间 的关系通过连线表示,方向隐含为从上向下
二元组表示法: Tree=(D, R) 集合图表示法: 每棵树对应一个圆形 广义表表示法: 类似广义表的形式 凹入表表示法: 类似书的编目 注:(1) 树表示方法的多样性,说明树结构在日
22
顺序存储结构的特点
从树根起,自上层至下层,每层自左至 右的给所有结点编号缺点是有可能对存 储空间造成极大的浪费,在最坏的情况 下,一个深度为H且只有H个结点的右单 支树确需要2h-1个结点存储空间。
若经常需要插入与删除树中结点时,则 不宜采用顺序存储结构。
2019/8/2
第六章 树和二叉树
第六章 树和二叉树
6.1 树的定义和基本概念 6.2 二叉树 6.3 遍历二叉树 6.4 树和森林 6.6 哈夫曼树及其应用
2019/8/2
第六章 树和二叉树
1
树型结构的简单描述
树型结构是一类重要的非线性结构。树型结构 是结点之间有分支,并且具有层次关系的结构, 它非常类似于自然界中的树。
树结构在客观世界中是大量存在的,例如家谱、 行政组织机构都可用树形象地表示。
-1层;(2)对任一结点,如果其右子树的最 大层次为1,则其左子树的最大层次为1或l+1。
性质4:具有n个结点的完全二叉树的深度为
log2n+1。 假设此二叉树的深度为k,则根据性质2及完全
二叉树的定义得到:2k-1-1<n<=2k-1或 2k-1<=n<2k 取对数得到:k-1< log2n <k 因 为k是整数。所以有:k= log2n +1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章 树和二叉树(一)
一 选择题
1、一棵具有 n 个结点的完全二叉树的树高度(深度)是( )
A 、log2n +1
B 、⎣⎦1log2n
+ C 、 log2n D 、log2n-1 2、二叉树的第I 层上最多含有结点数为( )
A 、2I
B 、2I-1-1
C 、2I-1
D 、2I -1
3、具有9个叶结点的二叉树中有( )个度为2的结点
A 、8
B 、9
C 、10
D 、11
4、由3 个结点可以构造出多少种不同的二叉树?( )
A 、2
B 、3
C 、4
D 、5
5、已知某二叉树的后序遍历序列是adbec 。
中序遍历序列是aebdc,它的前序遍历序列是()。
A 、acbed
B 、decab
C 、deabc
D 、ceabd
6、将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点的编号为1,则编号为40的结点的左孩子编号为( )。
A 、98
B 、99
C 、80
D 、48
7、若一棵二叉树具有9个度为2的结点,5个度为1的结点,则度为0的结点个数是( )
A 、9
B 、10
C 、15
D 、不确定
8.将含有83个结点的完全二叉树从根结点开始编号,根为1号,后面按从上到下、从左到右的顺序对结点编号,那么编号为41的双结点编号为 ( )
A、42 B、40 C、21 D、20
9、任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序( )
A 、 不发生改变
B 、 发生改变
C 、 不能确定
D 、以上都不对
10、在一非空二叉树的中序遍历序列中,根结点的右边( )
A 、只有右子树上的所有结点
B 、 只有右子树上的部分结点
C 、只有左子树上的部分结点
D 、只有左子树上的所有结点
11、 对二叉树从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用( )次序的遍历实现编号。
A 、先序
B 、中序
C 、后序
D 、从根开始的层次遍历
二 填空题
1、若一棵具有n 个结点的二叉树采用标准链接存储结构,那么该二叉树所有结点共有( )个空指针域。
2、一棵二叉树有69个结点,这些结点的度要么是0,要么是2。
这棵二叉树中度为2的结点有( )个。
3、若以{2,4,6,1,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是____。
4、已知二叉树有40个叶子结点,则该二叉树的总结点数至少是_____________。
5、一棵哈夫曼树有19个结点,则其叶子结点的个数是( )。
三 解答题
一棵二叉树的先序、中序和后序序列分别如下,其中有一部分为显示出来,试求出空格处的内容,画出该二叉树。
先序:_B_E_FHG_J
中序:E_BHFD_IGA
后序:_C_FJIJGD_A
答案:BCADDCBDAAC N+1
34。