(13)--第4章 树和二叉树数据结构.ppt

  1. 1、本文档共94页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第5章树和二叉树;教学目标;主要内容;5.1树和二叉树的定义;树是n个结点的有限集;凹入表示;根

叶子

森林

有序树

无序树;——即上层的那个结点(直接前驱)

——即下层结点的子树的根(直接后继)

——同一双亲下的同层结点(孩子之间互称兄弟)

——即双亲位于同一层的结点(但并非同一双亲)

——即从根到该结点所经分支的所有结点

——即该结点下层子树中的任一结点;——即树的数据元素

——结点挂接的子树数;二叉树(BinaryTree)是n(n≥0)个结点所构成的集合,它或为空树(n?=?0);或为非空树,对于非空树T:

(1)有且仅有一个称之为根的结点;

(2)除根结点以外的其余结点分为两个互不相交的子集T1和T2,分别称为T的左子树和右子树,且T1和T2本身又都是二叉树。;普通树(多叉树)若不转化为二叉树,则运算很难实现;二叉树基本特点:

结点的度小于等于2

有序树(子树有序,不能颠倒);4/8/2019;4/8/2019;5.2树和二叉树的抽象数据类型定义;CreateBiTree(T,definition)

初始条件;definition给出二叉树T的定义。

操作结果:按definition构造二叉树T。

PreOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:先序遍历T,对每个结点访问一次。

InOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:中序遍历T,对每个结点访问一次。

PostOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:后序遍历T,对每个结点访问一次。;5.3二叉树的性质和存储结构;深度为5的完全二叉树的结点数不可能是;;4/8/2019;4/8/2019;满二叉树:一棵深度为k且有2k-1个结点的二叉树。(特点:每层都“充满”了结点)

;满二叉树是叶子一个也不少的树,而完全二叉树虽然前n-1层是满的,但最底层却允许在右边缺少连续若干个结点。满二叉树是完全二叉树的一个特例。;深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为();性质4:具有n个结点的完全二叉树的深度必为

?log2n??+?1;4/8/2019;性质5:对完全二叉树,若从上至下、从左至右编号,则编号为i的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必??i/2。;二叉树的顺序存储;abcde0000fg;;A;分析:必有2n个链域。除根结点外,每个结点有且仅有一个双亲,所以只会有n-1个结点的链域存放指针,指向非空子女结点。;三叉链表;5.4遍历二叉树和线索二叉树;;先序遍历:

中序遍历:

后序遍历:;;DLR;则三种遍历算法可写出:;StatusPreOrderTraverse(BiTreeT){

if(T==NULL)returnOK;//空二叉树

else{

coutT-data;//访问根结点

PreOrderTraverse(T-lchild);//递归遍历左子树

PreOrderTraverse(T-rchild);//递归遍历右子树

}

}

;2019年4月8日;遍历的算法实现-中序遍历;中序遍历算法;遍历的算法实现-后序遍历;后序遍历算法;如图二叉树,后序序列为:;遍历算法的分析;如果去掉输出语句,从递归的角度看,三种算法是完全相同的,或说这三种算法的访问路径是相同的,只是访问结点的时机不同。;A;A;二叉树的建立(算法5.3);计算二叉树结点总数;计算二叉树叶子结点总数;计算二叉树深度;若二叉树中各结点的值均不相同,则:

由二叉树的前序序列和中序序列,或由其后序序列和中序序列均能唯一地确定一棵二叉树,

但由前序序列和后序序列却不一定能唯一地确定一棵二叉树。;某二叉树的前序序列为ABCD,中序序列为DCBA,则后序序列为;4/8/2019;思考;线索化二叉树;两种解决方法;1)若结点有左子树,则lchild指向其左孩子;

否则,lchild指向其直接前驱(即线索);;LTag:若LTag=0,lchild域指向左孩子;

若LTag=1,lchild域指向其前驱。

RTag:若RTag=0,rchild域指向右孩子;

若RTag=1,rchi

文档评论(0)

177****2883 + 关注
实名认证
内容提供者

热爱教育,专注于教育领域创作与分享,让我们共同进步。

1亿VIP精品文档

相关文档