收藏 分享(赏)

第4讲 树.ppt

上传人:jinchen 文档编号:9863025 上传时间:2019-09-12 格式:PPT 页数:22 大小:412KB
下载 相关 举报
第4讲 树.ppt_第1页
第1页 / 共22页
第4讲 树.ppt_第2页
第2页 / 共22页
第4讲 树.ppt_第3页
第3页 / 共22页
第4讲 树.ppt_第4页
第4页 / 共22页
第4讲 树.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、第4讲 树,学习要点: 理解树的定义和与树相关的术语。 理解树是一个非线性层次数据结构。 掌握树的前序遍历、中序遍历和后序遍历方法。 了解树的父结点数组表示法。 了解树的儿子链表表示法。 了解树的左儿子右兄弟表示法。 理解二叉树的概念。 了解二叉树的顺序存储结构。 了解二叉树的结点度表示法。 掌握用指针实现二叉树的方法。 理解线索二叉树结构及其适用范围。,第6章 树,树是一类重要的非线性数据结构,是以分支关系定义的层次结构 6.1 树的定义 定义 递归定义(1)单个结点是一棵树,该结点就是树根。(2)设T1,T2,,Tk都是树,它们的根结点分别为n1,n2nk,而n是另一个结点且以n1,n2n

2、k为儿子,则T1,T2,,Tk和n构成一棵新树。结点n就是新树的根。称n1,n2nk为一组兄弟结点。还称T1,T2,,Tk为结点n的子树。为了方便起见,空集合也看作是树,称为空树,并用来表示。空树中没有结点。,根,子树,基本术语 结点表示树中的元素,包括数据项及若干指向其子树的分支 结点的度结点的儿子结点个数 树的度一棵树中最大的结点度数 叶结点度为0的结点 分枝结点度不为0的结点 路径若存在树中的一个节点序列k1,k2,kj,使得结点ki是ki+1的父结点(1ij),则称该结点序列是树中从结点k1到结点kj的一条路径。 路径长度路径所经过的边的数目。 祖先、子孙 结点的高度从该结点到各叶结点

3、的最长路径长度 树的高度根结点的高度 结点的深度(或层数)从树根到任一结点n有唯一的路径,称该路径的长度为结点n的深度(或层数)。从根结点算起,根为第0层,它的孩子为第1层 有序树为树的每一组兄弟结点定义一个从左到右的次序 左儿子、右兄弟 森林m(m0)棵互不相交的树的集合,结点A的度:3 结点B的度:2 结点M的度:0,叶结点:K,L,F,G,M,I,J 分枝节点:A,B,C,D,E,H,结点A的孩子:B,C,D 结点B的孩子:E,F,结点I的双亲:D 结点L的双亲:E,结点B,C,D为兄弟 结点K,L为兄弟,树的度:3,结点A的层次:0 结点M的层次:3,结点A的高度:3 结点D的高度:2

4、 树的高度:3,结点A是结点F,G的祖先 结点B,C,是结点A的子孙,6.2 树的遍历 树的遍历 遍历按一定规律走遍树的各个顶点,且使每一顶点仅被访问一次,即找一个完整而有规律的走法,以得到树中所有结点的一个线性排列。,树T的3种遍历方式的递归定义:(T如图所示) (1)前序遍历先访问树根n,然后依次前序遍历T1,T2,Tk。 (2)中序遍历先中序遍历T1,然后访问树根n,接着依次对T2,T3,Tk 进行中序遍历。 (3)后序遍历先依次对T1,T2,Tk进行后序遍历,最后访问树根n。,树T,前序遍历:,后序遍历:,层次遍历:,A,B,E,F,I,G,C,D,H,J,K,L,N,O,M,E,I,

5、F,G,B,C,J,K,N,O,L,M,H,D,A,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,中序遍历:,E,B,I,F,G,A,C,J,H,K,N,L,O,M,D,6.4 二叉树 定义 定义:二叉树是n(n0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成。 特点 每个结点至多有二棵子树(即不存在度大于2的结点) 二叉树的子树有左、右之分,且其次序不能任意颠倒 基本形态,几种特殊形式的二叉树 满二叉树 定义:,特点:每一层上的结点数都是最大结点数 近似满二叉树(完全二叉树) 定义:若一棵二叉树最多只有最下面一层上结点的

6、度数可以小于2,并且最下面一层上的节点都集中在该层的最左边,则这种二叉树称为 ,近似满二叉树性质:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1in),有:(1) 如果i=1,则结点i是二叉树的根,无双亲;如果i1,则其双亲是i/2(2) 如果2in,则结点i无左孩子;如果2in,则其左孩子是2i(3) 如果2i+1n,则结点i无右孩子;如果2i+1n,则其右孩子是2i+1,二叉树的遍历,先序遍历:根、左子树、右子树 中序遍历:左子树、根、右子树 后序遍历:左子树、右子树、根 按层次遍历:从上到下、从左到右访问各结点,先序遍历:1 2 4 5 6 7 3,中序遍历:4 2

7、 6 5 7 1 3,后序遍历:4 6 7 5 2 3 1,层次遍历:1 2 3 4 5 6 7,由遍历序列恢复二叉树,已知结点的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树 利用先序序列的首结点(根),分割中序序列的左右子树。 已知结点的后序遍历序列和中序遍历序列可以唯一确定一颗二叉树 利用后序序列的末结点(根),分割中序序列的左右子树。,1 用顺序存储结构实现(一种无边表示) 适用的对象:近似满二叉树 基本想法:若将所有的结点按层自上而下每层自左至右,从1开始编号。,二叉树的存储,1 2 3 4 5 6 7 8 9 10 11 12,不适用的例子:,2 用二叉链表实现二叉树,typed

8、ef struct btnode *btlink; typedef struct btnode TreeItem element;btlink left, right; btnode;,哈 夫曼树,结点的路径长度:从根到该结点经过的分支数 结点的权:将结点赋予一个具有某种意义的数 带权路径长度:该结点的路径长度与该结点的权的乘积 树的带权路径长度:所有叶子结点带权路径长度之和,3,8,5,4,带权路径长度为:3*2+4*3+5*38*1=41,哈夫曼树:设有n个权值(w1,w2,wn),在这些,在这n个权值为叶子结点的所有二叉树中,带权路径长度最小的二叉树为哈夫曼树,哈夫曼算法,将n个权值按递增顺序排列成(w1,w2,wn) 取出两个最小的w1,w2作为左右孩子组成二叉树,并认为其根结点的权为w12=w1+w2 将w12插入到(w3,w4,wn)中,保持递增序列 重复步骤1,2直到构成一颗二叉树为止,这棵树就是哈夫曼树 见课本p118例题,哈夫曼树应用:哈夫曼编码,电文发送方将字符转换成0、1序列,接收方将0、1序列转换成字符 等长编码:使用频率不同都采用长度一样的编码。电文总长度长。 不等长编码:使用频率高编码短,使用频率低编码长,电文总长度较短。 给定每个字符的使用频率,使用给这些字符二进制编码,应如何编码使得电文的总编码最短 见课本p119例题,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报