树与二叉树
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A
D T1 E F L
K G H B C
J I T3 T2 M
计算机软件技术中,能用树的结构表示的例子: 计算机软件技术中,能用树的结构表示的例子: 现实世界中,能用树的结构表示的例子: 现实世界中,能用树的结构表示的例子: 操作系统中的多级文件目录结构, 操作系统中的多级文件目录结构,高级语言中源程序 学校的行政关系、 学校的行政关系 的语法结构等。 书的层次结构、 的语法结构等。 、书的层次结构、人类的家族血缘关 系等。 系等。
二叉树一种特殊的树型结构, 二叉树一种特殊的树型结构 , 特点是树中每个结 因为树的每个结点的度不同,存储困难, 因为树的每个结点的度不同,存储困难,使对树 点只有两棵子树, 且子树有左右之分, 。 点只有两棵子树 , 且子树有左右之分 , 次序不能 的处理算法很复杂。所以引出二叉树的讨论。 的处理算法很复杂。所以引出二叉树的讨论 颠倒。 颠倒。
1 3 6 12 13 14 7 15
1 2 5 11 6 3 7
11 12 完全二叉树
12 非完全二叉树
二叉树的存储结构
(1) 顺序存储结构 A 1 2 B 4 C ● 8 T[16] 5 ● E 9 10 6 ● D F 11 ● 12
用一组连续的存储单元存放 (1) 顺序存储结构 二叉树的数据元素。 二叉树的数据元素 。 结点在 (2) 链式存储结构 数组中的相对位置蕴含着结 点之间的关系。 点之间的关系。 3 ● 7 ● ● 13 ● 14 ● 15
总的射出分支与总的进入分支数相等: 总的射出分支与总的进入分支数相等:m=n1+2n2 88 99 10 11 12 13 14 15 10 11 12 13 14 15 因此: n0+n1+n2=n1+2n2+1 因此: 所以: n0= n2+1 所以:
E E
F F
满二叉树:深度为k且含有 满二叉树:深度为k 个结点的二叉树。 2k-1个结点的二叉树。 特点: 特点 : 每一层上的结点数都 是最大结点数。 是最大结点数。 完全二叉树: 完全二叉树: 4 指深度为k 指深度为 k 的 , 有 n 个结点 的 , 且每一个结点都与深度 8 的满二叉树中编号从1 为k 的满二叉树中编号从1 至 的结点一一对应 一一对应。 n的结点一一对应。 1 2 4 8 9 10 5 6 3 7 8 4 9 10 9 10 2 5 11
树转换为二叉树
A A C
(a)
B C
(b)
D
B
D I E F A
G H
E
F A B C
G
H
I
(c) E D
B C D F G (d)
E
F
G
H
I
H I
(2) 森林转换为二叉树 A A B C D E F H J G 方法: 方法: B F
E G
I •将各棵树分别转成二叉树; 将各棵树分别转成二叉树; 将各棵树分别转成二叉树 H C •把每棵树的根结点用线连起来; 把每棵树的根结点用线连起来; 把每棵树的根结点用线连起来 D •以第一棵树的根结点作为二叉树 以第一棵树的根结点作为二叉树 J I 的根结点,按顺时针方向旋转。 的根结点,按顺时针方向旋转。 A G B H F C H D J I E G
A B C E D F
性质1 二叉树的第i层上至多有2 性质1:二叉树的第i层上至多有2
i - 1 (i
≥1)个结点。 个结点。
证明:根据二叉树的特点,结论是显然的。 证明:根据二叉树的特点,结论是显然的。 用归纳法证明: 用归纳法证明: 性质2 深度为m的二叉树中至多含有2 个结点。 性质2:深度为m的二叉树中至多含有2m-1个结点。
二叉树的五种基本形态
要点:二叉树的结点的子树要区分左子树和右子树,即 要点:二叉树的结点的子树要区分左子树和右子树,
使在结点只有一棵子树的情况下也要明确指出该子树是 左子树还是右子树。 左子树还是右子树。
仅有 空二叉树 根结点 右子 树为空 左子 树为空 左右子树 均非空
二叉树的性质
二叉树的第i层上至多有2 个结点。 1. 二叉树的第i层上至多有2i-1(i≥1)个结点。 深度为m的二叉树中至多含有2 个结点。 2. 深度为m的二叉树中至多含有2m-1个结点。 若在任意一棵二叉树中, 个叶子结点, 3. 若在任意一棵二叉树中 , 有 n0 个叶子结点 , 有 n2 个度 的结点, 为2的结点,则:n0=n2+1
二叉树(Binary Tree)的定义 二叉树(Binary Tree)的定义
二叉树是一种重要的树形结构,其结构定义为: 二叉树是一种重要的树形结构,其结构定义为:二 是一种重要的树形结构 叉树是n(n≥0)个结点的有限集,它或为空树(n=0) n(n≥0)个结点的有限集 (n=0), 叉树是n(n≥0)个结点的有限集,它或为空树(n=0),或 由一个根结点和两棵分别称为根的左子树和右子树的、 由一个根结点和两棵分别称为根的左子树和右子树的、互 不相交的二叉树组成。 不相交的二叉树组成。
A
i=1 则结点数= 为根结点。 i=1,则结点数=20 =1为根结点 证明:深度为m的二叉树最多有m层 根据性质1 B 只要将第1 证明:深度为m的二叉树最多有m。 ,根据性质1,只要将第1层 到第m层的最大结点数相加, (i-1)-1 i-2 到第 m 层的最大结点数相加 , 就可得到整个二叉树中结点的最 若已知 1-1-1 层上结点数至多有 2(i- =2 个 , 由于二叉树每 2-1+…+2m-1=2m-1 C D 大值。 大值。2 i +2层上结点数至多有2 + 个结点度数最大为2 因此第i层上结点数最多为第i 个结点度数最大为2,因此第i层上结点数最多为第i-1层上结 E F 点数的2 点数的2倍,即2×2i-2=2i-1。 1 性质3:度为0的结点总比度为2的结点多一个。 性质3 度为0的结点总比度为2的结点多一个。 1
A 个叶子结点, 个度为1的结点, 的结点, 设:有n0个叶子结点,有n1个度为1的结点,有n2个度为2的结点A , 2 3 2 3 B B 则二叉树中结点总数为:n=n0+n1+n2 4 5 6m, 7 4 5 7 设所有进入分支的总数为m,则总的结点个数为:n=m+1 m,则总的结点个数为: 设所有进入分支的总数为6 则总的结点个数为CC n=m+1 DD
(2) 链式存储结构: 链式存储结构:
每个结点由数据域、左指针域和右指针域组成。 每个结点由数据域、左指针域和右指针域组成。
lchild
图为一般二叉 树的二叉链表 结构
Data A
rchild
A
^
B
B
C D
E
F
^
C
^
D
^
E
^
^
F
^
链式存储结构的算法描述: 链式存储结构的算法描述: Typedef struct BiTNode{ int data; struct BiTNode *lchild, *rchild; } BiTNode, * BiTree; lchild Data rchild
K K
L
M
T3 3
树的存储结构
树的存储结构可以采用具有多个指针域的多重链表,结点中 树的存储结构可以采用具有多个指针域的多重链表, 指针域的个数应由树的度来决定
root
A
B
C
D
E
F
G H I J
但在实际应用中,这种存储结构并不方便, 但在实际应用中,这种存储结构并不方便,一般将树转化为 二叉树表示, 二叉树表示,进行处理 可以用树来表示算术表达式。 可以用树来表示算术表达式。
百度文库
0
1 A
2 B
3 0
4 C
5 D
6 0
7 0
8 0
9 0
10 11 12 13 14 15 E F 0 0 0 0
1=2 2h-1= 24-1 = 15 一般二叉树必须按完全二叉树的形式存储,将造成存储的浪费。 一般二叉树必须按完全二叉树的形式存储,将造成存储的浪费。 若父结点在数组中i下标处,其左孩子在2*i处,右孩子在2*i+1处。 若父结点在数组中i下标处,其左孩子在2*i处 右孩子在2*i+1处 2*i 2*i+1
树
二 叉 树
树和森林转换为二叉树
由于二叉树可以用二叉链表表示, 由于二叉树可以用二叉链表表示,为了使一般树也能 用二叉链表表示,必须找出树与二叉树之间的关系。 用二叉链表表示,必须找出树与二叉树之间的关系。 这样,给定一棵树, 这样,给定一棵树,可以找到唯一的一棵二叉树与之 对应。 对应。
(1)树转换为二叉树的方法: 1 树转换为二叉树的方法: 根结点的右子树必空) (根结点的右子树必空)
lchild
Data
rchild
lchild
Data
rchild
树与二叉树的区别
树的结点个数至少为1 而二叉树的结点个数可以为0 1. 树的结点个数至少为1,而二叉树的结点个数可以为0。 树中结点的最大度数没有限制,二叉树结点最大度数为2 2. 树中结点的最大度数没有限制,二叉树结点最大度数为2。 3. 树的结点子树无左、右之分,二叉树的结点子树有明确的左、 树的结点子树无左、右之分,二叉树的结点子树有明确的左、 右之分。 右之分。
对每个孩子进行自左至右的排序; 对每个孩子进行自左至右的排序; 在兄弟之间加一条连线; 在兄弟之间加一条连线; 对每个结点,除了左孩子外,去除其与其余孩子之间的联系; 对每个结点,除了左孩子外,去除其与其余孩子之间的联系; 以根结点为轴心,将整个树顺时针转45度 以根结点为轴心,将整个树顺时针转45度。 45
A B C F
E
J D
I
二叉树的遍历
查找某个结点,或对二叉树中全部结点进行某种处理, 查找某个结点 ,或对二叉树中全部结点进行某种处理 , 就 需要遍历。 需要遍历。 (1)遍历定义及遍历算法 遍历是指按某条搜索路线寻访树中每个结点, 遍历是指按某条搜索路线寻访树中每个结点,且每个结点 只被访问一次。按先左后右的原则,一般使用三种遍序: 只被访问一次。按先左后右的原则,一般使用三种遍序: 先序遍历(D L R): 先序遍历(D 访问根结点,按先序遍历左子树,按先序遍历右子树。 访问根结点,按先序遍历左子树,按先序遍历右子树。 中序遍历(L 中序遍历(L D R): 按中序遍历左子树,访问根结点,按中序遍历右子树。 按中序遍历左子树,访问根结点,按中序遍历右子树。 后序遍历(L 后序遍历(L R D): 按后序遍历左子树,按后序遍历右子树,访问根结点。 按后序遍历左子树,按后序遍历右子树,访问根结点。 二叉树为空时,执行空操作,即空二叉树已遍历完。 二叉树为空时,执行空操作,即空二叉树已遍历完。
树(非线性数据结构)
1. 树
① 有关树的术语 ② 树的存储结构
2. 二叉树
① ② ③ ④ ⑤ ⑥ ⑦ 二叉树的性质 满二叉树与完全二叉树 二叉树的存储结构 树与二叉树的关系 二叉树的遍历 穿线二叉树 表达式的线性化
树的形式化定义:
树(Tree)是由一个或多个结点组成的有限集 (Tree)是由一个或多个结点组成的有限集 其中有一个特定的称为根的结点; 合T,其中有一个特定的称为根的结点;其余结 点可分为m(m≥0) m(m≥0)个互不相交的有限集 点可分为m(m≥0)个互不相交的有限集 ,…,Tm,每一个集合本身又是一棵树, T1,T2,T3 ,…,Tm,每一个集合本身又是一棵树, 且称为根的子树 子树。 且称为根的子树。 树的特点:仅有一个根结点,结点间有明 树的特点:仅有一个根结点, 显的层次结构关系。 显的层次结构关系。
有关树的基本术语: 有关树的基本术语:
结点(Node) 树中的元素, 1. 结点 ( Node ) : 树中的元素 , 包含数据项及若干指向其 子树的分支。 子树的分支。 结点的度(Degree) 结点拥有的子树数。 2. 结点的度(Degree):结点拥有的子树数。 A 结点的层次:从根结点开始算起,根为第一层. 3. 结点的层次:从根结点开始算起,根为第一层. 叶子(Leaf) 度为零的结点,也称端结点。 4. 叶子(Leaf):度为零的结点,也称端结点。 5. 孩子(Child):结点子树的根称为该结点的孩子结点。 孩子(Child) 结点子树的根称为该结点的孩子结点。 B C C 双亲(Parent) B 孩子结点的上层结点, D 6. 双亲 ( Parent ) : 孩子结点的上层结点 , 称为这些结点 T1 1 的双亲。 的双亲。 兄弟(Sibling) 同一双亲的孩子。 H 7. 兄弟(Sibling):同一双亲的孩子。 H E G E F G I J 深度(Depth) 树中结点的最大层次数。 8. 深度(Depth): 树中结点的最大层次数。 T2 2 森林(Forest) 棵互不相交的树的集合。 9. 森林(Forest):M棵互不相交的树的集合。 M