- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课件(第6章)树和二叉树
第六章 树和二叉树;主要内容; 掌握二叉树的结构特性;
熟悉二叉树的各种存储结构的特点及适用范围;
掌握各种遍历策略的递归算法,能灵活运用遍历算法实现二叉树的其他操作;
理解二叉树线索化的实质,掌握二叉树的线索化过程。
熟悉树的各种存储结构及其特点,掌握树和与二叉树的转换方法,掌握树的遍历方法 ;
解哈夫曼树的特性,掌握构造哈夫曼树和哈夫曼编码的方法;;6.1.1 树的定义;6.1.2 若干术语;——即上层的那个结点(直接前驱)
——即下层结点的子树的根(直接后继)
——同一双亲下的同层结点(孩子之间互称兄弟)
——即双亲位于同一层的结点(但并非同一双亲);
——即从根到该结点所经分支的所有结点
——即该结点下层子树中的任一结点;结点的层次
终端结点
分支结点;树的抽象数据类型定义;从逻辑结构看:1)树中只有根结点没有前驱;2)除根外,其余结点都有且仅一个前驱;
3)一对多(1:n),树的结点可以有零个或多个后继;4)除根外的其他结点,都存在唯一条从根到该结点的路径;
5)树是一种分枝结构;教师;嵌套集合表示法;( A ( B ( E ( K, L ), F ), C ( G ), D ( H ( M ), I, J ) )
约定:
根作为由子树森林组成的表的名字写在表的左边;凹入表示法;A;6.1.5 树的运算 ; 为何要重点研究每结点最多只有两个 “叉” 的树?
二叉树的结构最简单,规律性最强;
可以证明,所有树都能转为唯一对应的二叉树,不失一般性。;定义:是n(n≥0)个结点的有限集合,由一个根结点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成 。
逻辑结构: 一对二(1:2)
基本特征:
① 每个结点最多只有两棵子树(不存在度大于2的结点);
② 左子树和右子树次序不能颠倒。;问:具有3个结点的二叉树可能有几种不同形态? ;二叉树的抽象数据类型定义(P121-122);讨论1:第i层的结点数最多是多少?
(利用二进制性质可轻松求出) ;性质3: 对于任何一棵二叉树,若2度的结点数有n2个,则叶子数(n0)必定为n2+1 (即n0=n2+1);3. 深度为9的二叉树中至少有 个结点。
A)29 B)28 C)?? D)29-1;完全二叉树:深度为k 的、有n个结点的二叉树,当且仅当其每一个结点都与深度为k 的满二叉树中编号从1至n的结点一一对应。;性质4:
具有n个结点的完全二叉树的深度必为?log2n?+1.;性质5: 对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i,其右孩子编号为2i+1;其双亲的编号必为i/2(i=1 时为根,除外)。 ; 一棵完全二叉树有1000个结点,则它必有 个叶子结点,有 个度为2的结点,有 个结点只有非空左子树,有 个结点只有非空右子树。;1 顺序存储结构
按二叉树的结点“自上而下、从左至右”编号,用一组连续的存储单元存储。; A;;每个结点至少包含三个域:数据域、左指针域、右指针域;在含有n个结点的二叉链表中有n+1个空链域。;二叉树链式存储举例: ; 三叉链表中每个结点至少包含四个域:
数据域、双亲指针域、左指针域、右指针域;6.3.1 遍历二叉树;遍历规则———;例1:;+;这实际上是先序遍历的递归定义,递归定义包括两个部分:
1)基本项(也叫终止项); 2)递归项; 下面给出先序、中序、后序遍历递归算法,为了增加算法的可读性,这里对书上算法作了简化,没有考虑访问结点出错的情况(即我们假设调用函数visit( )访问结点总是成功的。;void PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e))
{//采用二叉链表存贮二叉树, visit( )是访问结点的函数。本算法先序遍历以T为根结点指针的二叉树,对每个数据元素调用函数Visit( )
if (T) { //若二叉树为空,结束返回
Visit(T-data);
PreOrderTraverse(T-lchild, Visit);
PreOrderTraverse(T-rchild, Visit); }
}//PreOrderTraverse
;最简单的Visit函数是: Status PrintElement(TElemType e) {
原创力文档


文档评论(0)