辅导07 树与二叉树
第7章-树和二叉树第2讲-二叉树的概念
第一层
树的特 点?
第二层 第三层 第四层
复习:二、树的基本术语
1.结点A、D的度?树的度? 2;3;3; 2.根结点?分支结点?叶子结点? A;BCDE;GHIJF;
在二叉链中,空指针的个数?
b A
B∧
C
∧D
∧E∧
∧F∧
∧G∧
n个结点 2n个指针域 分支数为n-1 非空指针域有n-1个 空指针域个数 = 2n-(n-1) = n+1
n=7 空指针域个数=8
39/10
40/10
二叉树
当n=3,结果为ห้องสมุดไป่ตู้。
第n个Catalan数
41/23
有n个结点并且高度为n的不同形态的二叉树个数是多少? 该二叉树:有n层,每层一个结点,该结点可以
43/23
结点个数为n,树形可以唯一确定 叶子结点个数为n0,树形不能唯一确定 n为奇数时,n1=0; n为偶数时,n1=1。 n0=n2+1 高度h= log2(n+1),是n个结点高度最小的二叉树
44/23
含有60个叶子结点的二叉树的最小高度是多少?
在该二叉树中,n0=60,n2=n0-1=59,n=n0+n1+n2=119+n1。 当n1=0且为完全二叉树时高度最小。 此时高度h=log2(n+1)= log2120=7。
作为双亲结点的左孩子,也可以作为右孩子 这样的二叉树的个数=1×2×…×2=2n-1。
例如,当n=3时有22=4个这样的二叉树。
全面007树与二叉树(续).ppt
后根遍历树的操作定义如下
(1)从左到右依次后根遍历
根的每棵子树。
(2)访问树的根结点; 例如:已知树如下:
则后根遍历序列为:
begfcda
最新.课件
a
b
c
d
e
f
g
6
五、树及森林的遍历
2.森林的遍历(两种):
先序遍历森林的操作定义如下 (1)访问森林中的第一棵树的根结点; (2)先序遍历第一棵树中根结点的子树森林; (3)先序遍历除第一棵树之后剩余的树构成的森林
e
d
二叉树的先序遍历序列g 均为:
abcefgd
则该树的后根遍历序列和其相应的
二叉树的中序遍历序列均为:
begfcda
最新.课件
f g
9
六、树、森林的遍历与其对应的二叉树的 遍历的关系
(2)森林与其对应的二叉树在遍历上的关系;
森林的先序遍历和中序遍历分别与其对应的二叉树的先序
遍历和中a序遍历相对应;f
第六章 树与二叉树(续)
最新.课件
1
二、二叉树的应用举例:算术表达式- 的波兰
表达式和逆波兰表达式的求解
(1)用二叉树表示算术表达式;+
/
操作数1 运算符 操作数2
运算符
a
×
e
f
操作数1
操作数2
b-
c
d
例如,用二叉树表示算术表达式a+b×(c-d) - e/f
用3种不同的遍历算法遍历该二叉树有:
表达式的前缀表示(波兰式) -+a×b-cd/ef
e
a f
红色线段
b
f
g
h 顺时针旋转45度
cg
树和二叉树
树的定义 ≥0) 结点的有限集合。 的有限集合 树:n(n≥0)个结点的有限集合。当n=0时, 称为空树;任意一棵非空树满足以下条件: 称为空树;任意一棵非空树满足以下条件:
⑴ 有且仅有一个特定的称为根的结点; 有且仅有一个特定的称为根的结点; 除根结点之外的其余结点被分成m ⑵ 当n>1时,除根结点之外的其余结点被分成m >0) 互不相交的有限集合 的有限集合T ,T (m>0)个互不相交的有限集合T1,T2,… ,Tm,其中 子树。 每个集合又是一棵树,并称为这个根结点的子树 每个集合又是一棵树,并称为这个根结点的子树。
树的定义是采用递归方法
1 树的逻辑结构
A B D E F H I
(b)一个非树结构 b)一个非树结构 (c)一个非树结构 c)一个非树结构
A C G D B F C G B D
A E F C G
(a) 一棵树结构
1 树的逻辑结构
树的基本术语 结点的度:结点所拥有的子树的个数。 结点的度:结点所拥有的子树的个数。 叶子结点:度为0的结点,也称为终端结点。 叶子结点:度为0的结点,也称为终端结点。 分支结点:度不为0的结点, 分支结点:度不为0的结点,也称为非终端结 点。 树的度:树中各结点度的最大值。 树的度:树中各结点度的最大值。
一对一
一对多
2 二叉树的概念和性质
二叉树的定义
二叉树是n n≥0)个结点的有限集合, 二叉树是n(n≥0)个结点的有限集合,该集 合或者为空集 称为空二叉树), 空集( ),或者由一 合或者为空集(称为空二叉树),或者由一 个根结点和两棵互不相交的、 个根结点和两棵互不相交的、分别称为根结 点的左子树 右子树的二叉树组成 左子树和 的二叉树组成。 点的左子树和右子树的二叉树组成。
树和二叉树专题知识课件
因为各子树旳遍历和整个二叉树旳遍历方式相同,所以, 各子树旳遍历可递归调用二叉树旳遍历算法。
先序遍历递归算法如下:
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个算法)
《树和二叉树》课件
"树和二叉树"是计算机科学中重要的数据结构。本课件将详细介绍树和二叉树 的概念、存储结构、遍历方式、二叉搜索树、平衡树等内容。让我们一起探 索这个精彩领域吧!
概念介绍
树的定义及特点
树是由节点和边组成的非线性数据结构,具有分层结构和简洁性。
二叉树的定义及特点
二叉树是一种特殊的树,每个节点最多有两个子节点。
二叉搜索树是一种有序二叉树,左子树节点 都小于根节点,右子树节点都大于根节点。
2 插入和删除节点
通过比较节点值,插入或删除符合条件的节 点,保持二叉搜索树的有序性。
3 查找节点
通过比较节点值,快速定位目标节点。
4 遍历
二叉搜索树支持前序、中序和后序遍历。
平衡树
AVL树
AVL树是一种自平衡的二叉搜索树,通过旋转操作 保持树的平衡。
二叉树的遍历方式
1 先序遍历
先访问根节点,然后按先序遍历左子树,再 按先序遍历右子树。
2 中序遍历
先按中序遍历左子树,然后访问根节点,最 后按中序遍历右子树。
3 后序遍历
先按后序遍历左子树,然后按后序遍历右子 树,最后访问根节点。
4 层序遍历
按层级顺序逐层访问二叉树节点。
二叉搜索树
1 定义及性质
二叉树的分类
根据子节点的数量和排列方式,二叉树可分为满二叉树、完全二叉树和平衡二叉树。
树和二叉树的存储结构
双亲链表存储
使用数组存储节点,并在节点 中保存父节点信息。
孩子链表存储
使用链表存储节点,并在节点 中保存子节点信息。
孩子兄弟链表存储
使用链表存储节点,并在节点 中保存第一个孩子节点和下一 个兄弟节点的信息。
树和二叉树PPT课件
有两归个纳孩基子:结点i =,1则层每时一,层只均有比一上个一根层结的点结,点个数多一
倍。
2i-1 = 20 = 1;
归纳假设:假设对所有的 j,1≤ j i,命题成立;
按照归等纳比证数明列:的二定叉义树,上每每一个项结都点可至以多看有作两是棵相子应树每,一则层第
上的结点个数,i 则层,的a结i=点ai*数qi-1=22i-1i-2 2 = 2i-1 。
Dl,Dr
(3)若Dl , Dr都不为空集,则Dl , Dr本身又是一棵符 合
本定义的二叉树,称为根root的左右子树。
基本操作P:(见教材)
17
} ADT BinaryTree
二叉树的5种基本形态
二叉树的定义
A
A
A
A
B
B
BC
(a)
(b)
(c)
(d)
(e)
空二叉树
根和空的 根和左子树 根和右子树 左右子树
线性表和广义表 栈和队列 数组和广义表
树
……
线性表 广义表
栈
队列 ……
8
树的定义
树的定义
树是由n (n 0)个结点组成的有限集合。 如果n = 0,称为空树; 如果n > 0,则:
有一个特定的称之为根(root)的结点,它只有后继,但没有前
驱;
除根以外的其它结点划分为m(m>0)个互不相交的有限集合T1, T2, …, Tm。
10
树的定义
抽象数据类型树的定义
ADT Tree { 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R:若D为空集,则称为空树; 否则: (1) 在D中存在唯一的称为根的数据元素root, (2) 当n>1时,其余结点可分为m (m>0)个互
树与二叉树ppt课件
}nodetype;
3.二叉树的基本操作
二叉树的基本操作有: (1)Initiate(bt):建立一棵空二叉树。 (2)Create(x,lbt,rbt):生成一棵以x为根结点的数据域信息,以
lbt和rbt为左、右子树的二叉树。 (3)InsertL(x,Parent):将数据域信息为x的结点插入到二叉树
}nodetype;
int Initiate(nodetype **bt); //1、初始化建立二叉树bt的头结点
nodetype *Create(elemtype x,nodetype *lbt,nodetype *rbt); //2、生成一棵以x为根结点的数据 域值,以lbt和rbt为左右子树的二叉树
void PreOrder(nodetype *bt); //7、前序递归遍历二叉树bt
void InOrder(nodetype *bt); //8、中序递归遍历二叉树bt
void PostOrder(nodetype *bt); //9、后前序递归遍历二叉树bt
点为第二层,其余各层依次类推。 (8)深度:树中结点的最大层次数。 (9)森林:是m(m≥0)棵互不相交的树的集合。 (10)路径:树中存在结点系列,使得Ki是Ki+1的双亲(1≤i≤n-1)。 (11)路径长度:从树根到树中每一结点的路径长度之和。
1.树和二叉树的基本概念
(12)二叉树:或是空集或是由互不相交的子集构成。二叉 树的性质如下:
7、二叉树算法的C程序实现——定义、函数声明
#define elemtype int
#define MAXNODE 100
typedef struct BTreeNode{
elemtype Data;
树与二叉树
东北
哈工大
吉大
青海大学 西北
清华 北大
华北
…
南开
中南
西安交大
兰州大学 …
华中科大
西南
…
重庆大学
武汉大学 华南
…
电子科大
…
东北大学
大连理工
…
华东
南京大学 浙大
…
上海交大
深圳大学 华南理工
4.1 树的基本概念
• 家族树:
曾祖父
祖父
…
父亲 伯父 叔父 …
儿子 女儿 …
规律: 问题中数据元素之间有1 对多的关系
4.2 二叉树
(3) 完全二叉树的性质
0
① 有n 个结点的完log2n +1 或为 log2(n+1) 3 4
5
证明:由性质2,若完全二叉树深度为h,应有:
(深度h-1的满二叉树结点数) < n ≤(深度h的满二叉树结点数) 即: 2h-1-1 < n ≤ 2h-1 或: 2h-1≤ n < 2h
很明显:此性质也适用理想平衡二叉树
② 对完全二叉树中n个结点从上到下,每层从左到右 从0开始顺序编号,则有:
a. 若2i+1 < n,则 i的左孩子序号为 2i+1,否则 i为叶子; b. 若2i+2 <n,则 i的右孩子序号为 2i+2,否则 i无右孩子; c. 若结点编号 i >0,则其双亲序号为 (i-1)/2 。
4.2 二叉树
一、二叉树 的定义
定义: 二叉树( Binary Tree)是 n (n ≥0)个结点的有限集,
它或为空,或满足:
(1) 有一个特定的结点——根结点; (2) 其余结点分为不相交的两个子集:
数据结构树和二叉树知识点总结
数据结构树和二叉树知识点总结数据结构是计算机科学中非常重要的一门学科,它研究各种数据的组织、存储和操作方式。
而在数据结构中,树和二叉树是最常用和基础的数据结构之一。
本文将从树和二叉树的基本定义、特点和应用等方面进行总结,旨在帮助读者更好地理解和应用这两种数据结构。
一、树的基本定义和特点树是一种非线性的数据结构,它由节点和边组成。
树的基本定义是:一个节点可以有零个或多个子节点,但只能有一个父节点,且有且仅有一个节点没有父节点,这个节点称为根节点。
树的特点有以下几点:1. 每个节点都可以有零个或多个子节点,子节点之间没有任何顺序关系。
2. 根节点是树的唯一一个没有父节点的节点。
3. 每个非根节点有且只有一个父节点。
4. 树中任意两个节点之间都可以通过唯一的路径相连。
树的应用非常广泛,例如文件系统、网络结构、人类语言等都可以用树来表示和组织。
二、二叉树的基本定义和特点二叉树是树的一种特殊形式,它的每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉树的基本定义是:一个节点最多有两个子节点,且子节点之间有左右之分。
二叉树的特点有以下几点:1. 每个节点最多有两个子节点,分别称为左子节点和右子节点。
2. 左子节点和右子节点可以为空,但不能同时为空。
3. 二叉树的子树也是二叉树。
二叉树的应用非常广泛,例如在排序算法中,二叉树可以用来实现快速查找和插入等操作。
此外,二叉树还可以用来表示表达式、解析树和哈夫曼树等。
三、常见的树和二叉树算法1. 遍历算法:树和二叉树的遍历是指按照一定顺序访问树中的所有节点。
常见的遍历算法有前序遍历、中序遍历和后序遍历。
前序遍历是先访问根节点,然后再依次访问左子树和右子树;中序遍历是先访问左子树,然后再访问根节点,最后再访问右子树;后序遍历是先访问左子树,然后再访问右子树,最后再访问根节点。
2. 搜索算法:树和二叉树的搜索是指在树中查找指定节点或满足特定条件的节点。
常见的搜索算法有深度优先搜索(DFS)和广度优先搜索(BFS)。
树和二叉树这章所有知识点总结
树和二叉树这章所有知识点总结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
有根树
树的结构由根节点和子节点组成,根节点是整个树的起点。
2
无环图
树是一种无环的图,这意味着树中不存在回路或循环路径。
3
分级结构
Байду номын сангаас
树的层次结构使得数据可以按照分级关系进行组织和访问。
二叉树的结构与特点
查找和排序
二叉树的结构使得在其中进行查找和排序操 作更加高效,而树适用于组织和管理分级数 据。
树和二叉树的应用领域
1 数据库管理
树和二叉树广泛应用于数据库管理系统中,用于索引和组织数据。
2 编译器设计
编译器中常用的语法树和抽象语法树是树的变种,用于解析和分析程序代码。
3 网络路由
在网络路由算法中,树和二叉树被用于在网络中选择最佳的路径。
树和二叉树的定义
树和二叉树是在计算机科学中常见的数据结构。它们是由节点组成的有层次 结构,用于存储和组织数据。
树的定义
树的层次结构
树是一种非线性数据结 构,由根节点和多个子 节点组成。每个子节点 都可以再次拥有自己的 子树。
节点和边
树的节点表示数据元素, 而边代表节点之间的关 系。每个节点可以有多 个子节点,但只能有一 个父节点。
完全二叉树
二叉搜索树
完全二叉树是一种特殊的二 叉树结构,除了最后一层外, 其他层的节点都是满的。
二叉搜索树是一种有序的二 叉树,左子节点的值小于父 节点,右子节点的值大于父 节点。
平衡二叉树
平衡二叉树是一种高度平衡 的二叉树,保持左右子树的 高度差在一个可接受的范围 内。
树与二叉树的关系
树和二叉树教案1
教学过程一、导入树是一类重要的非线性数据结构,是以分支关系定义的层次结构。
在日常生活同学们经常见到树。
树有一个树根。
有许多树枝,在树枝上长有很多树叶。
就象我们今天要讲的树,是一种层次结构。
二、新授(一)树1.树的定义树(tree)是由n (n≥0) 个结点组成的有限集合。
它是树型结构的简称,是一种重要的非线性数据结构,应用广泛。
如:磁盘上的文件目录结构、家族成员关系、单位的组织机构、书的内容组织、算术表达式等。
任何一棵非空树是一个二元组:Tree = (root,F)其中:root被称为根结点,F被称为子树森林2.基本术语森林:是m(m≥0)棵互不相交的树的集合有向树:有确定的根,树根和子树根之间为有向关系(自上到下,自左到右)有序树:树中结点的各子树从左到右是有次序的,不能互换无序树:树中结点的各子树从左到右是没有次序的子女:结点的子树的根是该结点的孩子双亲:孩子结点的根结点兄弟:具有同一双亲的结点堂兄弟:双亲在同一层的结点祖先:从根到该结点所经历分支上的所有结点子孙:以某结点为根的子树中的任一结点学生活动:请同学门总结树形与线形的异同(二) 二叉树1.二叉树的定义二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。
2.二叉树的五种基本形态二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
3.二叉树不是树的特例(1)二叉树与无序树不同二叉树中,每个结点最多只能有两棵子树,并且有左右之分。
二叉树并非是树的特殊情形,它们是两种不同的数据结构。
(2)二叉树与度数为2的有序树不同在有序树中,虽然一个结点的孩子之间是有左右次序的,但是若该结点只有一个孩子,就无须区分其左右次序。
而在二叉树中,即使是一个孩子也有左右之分。
4、满二叉树和完全二叉树是二叉树的两种特殊情形。
a、满二叉树一棵深度为k且有2k-1个结点的二又树称为满二叉树。
树和二叉树.
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。
树和二叉树
5
2018/11/9
二、树的基本术语
结点:数据元素的内容及其指向其子树的分支统称为结点。 结点的度:结点的分支数。 终端结点(叶子): 度为0的结点。
非终端结点:度不为0的结点。
树的度:树中所有结点的度的最大值。 结点的层次: 树中根结点的层次为1,根结点的子树的根为第 2层,以此类推。 树的深度或高度:树中所有结点层次的最大值。 有序树、无序树:如果树中每棵子树从左向右的排列有一定 的顺序,不得互换,则称为有序树,否则称为无序树。
三、二叉树的存储结构 二叉树也可以采用两种存储方式:顺序存储结构和链式 存储结构。 1. 顺序存储结构(数组表示) 所谓二叉树的顺序存储结构,就是用一组地址连续的存 储单元依次存储二叉树中的结点。对于满二叉树和完全二 叉树,即将完全二叉树中编号为i的结点存储在一维向量中 下标为i-1的分量中。 #define MAX_TREE_SIZE 100 //二叉树的最大结点树 typedef TElemType SqBiTree[MAX_TREE_SIZE]; //0号单元存储根结点 SqBiTree T;
11
第六章 2018/11/9
性质2:深度为 k 的二叉树至多有2k-1个结点(k 1)。 证明:由性质1可见,深度为k的二叉树的最大结点数为
12
第六章 2018/11/9
性质3:对任何一棵二叉树T, 如果其叶结点数为 n0, 度为2的结 点数为 n2,则n0=n2+1。 证明:若度为1的结点有 n1 个,总结点个数为n, 则根据二叉树的定义,有 n = n0 + n1 + n2 又因为二叉树中除根结点外,其余结点都只有一个分支进入, 设B为分支总数,则B=n-1 由于分支是由度为1和度为2的结点射出的, ∴ B=n1+2*n2 因此,有 n1 + 2n2= n0 + n1 + n2 - 1 n2 = n0 - 1 n0 = n2 + 1
树与二叉树
返回
14
二叉树与2度树:
(1) 二叉树
A
A
A
B
BC
C
T1
T2
T3
A
A
BC BC
D
D
T4
T5
(2) 树
A
A BC
A
A
B
BC
C
D
T1
T2
T3
T4
0度树
2度树
1度返树回
2度树
15
三个结点不同形态的二叉树(5种)
A
A
A
A
A
BC
B
B
B
C
C
C
T1
T2
T3
T4
三个结点不同形态的树(2种)
A
A
B C
T5
BC
ClearTree(&T);
初始条件:树T存在。
操作结果:将树T清为空树。
TreeEmpty(T)
初始条件:树T存在。
操作结果:若T为空树,则返回TURE,否则FALSE。
TreeDepth(T)
初始条件:树T存在。
操作结果:返回T的深度。
Root(T)
初始条件:树T存在。
基本操作P(15个):
查找(8个):
Root(T); Value(T, cur_e); Parent(T, cur_e);
LeftChild(T, cur_e); RightSibling(T, cur_e);
TreeEmpty(T); TreeDepth(T);
TraverseTree(T, Visit());
1
2
3
4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
L
R
L
R
二叉树的五种不同形态
6
二叉树的性质
性质1 性质1 若二叉树的层次从 0 开始, 则在二叉 开始, 个结点。 树的第 i 层最多有 2i 个结点。( i ≥ 0) [证明用数学归纳法] 证明用数学归纳法] 注:若二叉树的层次从 1 开始, 则在二叉树 开始, 个结点。 的第 i 层最多有 2i-1 个结点。( i ≥ 1)
A B H DF A B H D F K E C G
28
A B H D F EKCG H D B
A E F KCG
EKCG
线索二叉树
具有n个结点的二叉树:共有2n个指针,其中 有n-1个有效指针,n+1个空指针。线索二叉树充 分利用2n个指针,将空指针指向按照某种遍历次 序下该结点的前驱和后继结点。这种指针称为线 索,给二叉树加上线索的过程称为二叉树的线索 化。 为区分结点的指针是指向儿子结点、还是前驱、 后继结点,需要设置线索标记。
int Count (BinTreeNode *T) { if (T == NULL) return 0; return 1+Count (T->leftChild) +Count (T->rightChild); }
25
求二叉树高度的递归算法
int Height (BinTreeNode *T) { if (T == NULL) return -1; else { int m = Height (T->leftChild); int n = Height (T->rightChild)); return (m > n) ? m+1 : n+1; }
36
Huffman编码 Huffman编码
主要用途是实现数据压缩。 主要用途是实现数据压缩。
设给出一段报文: 设给出一段报文: CAST CAST SAT AT A TASA 字符集合是 { C, A, S, T },各个字符出现的频度(次数) },各个字符出现的频度(次数) 是 W={ 2, 7, 4, 5 }。 }。 若给每个字符以等长编码 A : 00 T : 10 C : 01 S : 11 则总编码长度为 ( 2+7+4+5 ) * 2 = 36. 36.
前序遍历二叉树算法的框架是: 前序遍历二叉树算法的框架是: 若二叉树为空,结束; 若二叉树为空,结束; 否则 / + (V); 访问根结点 (V); (L); 前序遍历左子树 (L); a f * e (R)。 前序遍历右子树 (R)。 遍历结果
b
-
-+a*b-cd/ef
c
d
21
二叉树递归的前序遍历算法
D I J
1层 2层 3层
4
树的表示
双亲表示法
便于求解父结点 不利于求解兄弟结点和儿子结点 不利于求解兄弟结点和父结点
孩子表示法 便于求解儿子结点 左孩子右兄弟表示法
二叉树表示法 二叉链表表示法
5
二叉树 (Binary Tree)
二叉树的定义
一棵二叉树是结点的一个有限集合, 一棵二叉树是结点的一个有限集合, 该集合或者为空, 该集合或者为空,或者是由一个根结点加 上两棵分别称为左子树和右子树的、 上两棵分别称为左子树和右子树的、互不 相交的二叉树组成。 相交的二叉树组成。
void PostOrder (BinTreeNode *T) { if (T != NULL) { PostOrder (T->leftChild); PostOrder (T->rightChild); visit (T->data); } }
24
应用二叉树遍历的事例
计算二叉树结点个数的递归算法
9
性质4 性质4:具有 n 个结点的不同二叉树的数目
b n = ∑ b i ⋅ b n −i −1
i =0 n −1
1
bi
bn-i-1
Catalan函数 Catalan函数 1 1 (2n)! n bn = C2n = n + 1 n!⋅n! n +1
10
定义1 定义1 满二叉树 (Full Binary Tree) 定义2 定义2 完全二叉树 (Complete Binary Tree) 若设二叉树的高度为h 则共有h+1 若设二叉树的高度为h,则共有h+1层。除 层外, 第 h 层外,其它各层 (0 ∼ h-1) 的结点数都 达到最大个数, 达到最大个数,第 h 层从右向左连续缺若干 结点,这就是完全二叉树。 结点,这就是完全二叉树。
前序 中序 后序 VLR LVR LRV
18
中序遍历 (Inorder Traversal)
中序遍历二叉树算法的框架是: 中序遍历二叉树算法的框架是: 若二叉树为空,结束; 若二叉树为空,结束; 否则 / + (L); 中序遍历左子树 (L); (V); 访问根结点 (V); a * e f (R)。 中序遍历右子树 (R)。 遍历结果 a+b*c-d-e/f
4 8
5
32Hale Waihona Puke 具有不同带权路径长度的二叉树
2 2 4 5 7 4 5 7 7 5 2 4
WPL = 2*2+ 4*2+5*2+ 7*2 = 36
WPL = 2*1+ WPL = 7*1+ 4*2+5*3+ 5*2+2*3+ 7*3 = 46 4*3 = 35
带权路径长度达到最小
33
构造哈夫曼树的过程: 1) 将给定的n个权值{w1,w2,...,wn}作为n个根结点的权值,构造 森林{T1,T2,...,Tn},其中每棵二叉树只有一个根结点; 2) 在森林中选取两棵根结点权值最小的二叉树作为左右子树 构造一棵新二叉树,其根结点权值为子树树根的权值之和; 3) 删去上面选择的两棵二叉树,并将刚刚新构造的二叉树加 入到森林中; 4) 重复上面2)和 3),直到森林中只有一棵二叉树为止。这 棵二叉树就是哈夫曼树。
b c
d
19
二叉树递归的中序遍历算法
void InOrder (BinTreeNode *T) { if (T != NULL) { InOrder (T->leftChild); visit (T->data); InOrder (T->rightChild); } }
20
前序遍历 (Preorder Traversal)
29
Huffman树(§11) 树 11)
1.哈夫曼树的定义
30
• 路径 • 路径的长度 • 带权路径长度(WPL):树的各叶结点所带 树的各叶 树的各 的权值 wi 与该结点到根的路径长度 li 的乘 积的和, 积的和,即
WPL = ∑ wk lk
k =1
31
n
• 哈夫曼二叉树或最优二叉树:带权的路径长度 最小的二叉树
void PreOrder (BinTreeNode *T) { if (T != NULL) { visit (T->data); PreOrder (T->leftChild); PreOrder (T->rightChild); } }
22
后序遍历 (Postorder Traversal)
11
性质5 性质5: 如果完全二叉树各层次结点从 1 开始编号: 则有以下关系: 开始编号:1, 2, 3, …, n,则有以下关系:
若i = 1, 则 i 无双亲 的双亲为 2 若i > 1, 则 i 的双亲为i / 2 若2*i <= n, 则 i 的左儿子为 2*i, 2*i 2*i 2*i 的右儿子为2*i 若2*i+1 <= n, 则 i 的右儿子为2*i+1 若 i 为奇数, 且i != 1, 为奇数, 则其左兄弟为i 则其左兄弟为i-1, 若 i 为偶数, 且i != n, 为偶数, 则其右兄弟为i 则其右兄弟为i+1 2 4 5 6
后序遍历二叉树算法的框架是: 后序遍历二叉树算法的框架是: 若二叉树为空,结束; 若二叉树为空,结束; 否则 / + (L); 后序遍历左子树 (L); (R); 后序遍历右子树 (R); a f * e (V)。 访问根结点 (V)。 遍历结果 abcd-*+ef/-
b c
d
23
二叉树递归的后序遍历算法
2
树的特点
每棵子树的根结点有且仅有一个直接前 但可以有0个或多个直接后继。 驱,但可以有0个或多个直接后继。
A B E K L F C G H M D I J
0层 1层 2层 3层
3
结点 结点的度 分支结点 叶结点
B E K L F
子女 双亲 兄弟
A C G H M
祖先 子孙 结点层次
树的度 树深度 森林 0层
1 3 7
8 9 10
12
二叉树的顺序表示
0 1 3 7 8 4 9 5 2 6 7 3 1 4 5 0 2 6
8 9 10 11 12 13
0123456789 完全二叉树 的顺序表示
0123 5678 一般二叉树 的顺序表示
11 13
13
极端情形: 极端情形: 只有右单支的二叉树
对于完全二叉树, 对于完全二叉树, 用顺序表示较为 方便; 方便; 对于一般二叉树, 对于一般二叉树, 用链表表示较好; 用链表表示较好; 0 2 6 14 30
7
性质2 性质2 高度为 h 的二叉树最多有 2h+1-1个 结点。 结点。(h ≥ -1) [证明] 证明] h+1 20 + 21 + 22 + … + 2h = 2h+1-1 空树的高度为空树的高度为-1 只有根结点的树的高度为0 只有根结点的树的高度为0