网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构-5树和二叉树.pptxVIP

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第5章树和二叉树;教学目标;5.1树和二叉树的定义;树〔Tree〕是n〔n≥0〕个结点的有限集,它或为空树〔n?=?0〕;或为非空树,对于非空树T:

〔1〕有且仅有一个称之为根的结点;

〔2〕除根结点以外的其余结点可分为m〔m>0〕个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树〔SubTree〕。;5;6;树的根本术语;双亲(parent):即上层的那个结点(直接前驱)

孩子(child):即下层结点的子树的根(直接后继)

兄弟:同一双亲下的同层结点〔孩子之间互称兄弟〕

堂兄弟:即双亲位于同一层的结点〔但并非同一双亲〕

祖先:即从根到该结点所经分支的所有结点

子孙:即该结点下层子树中的任一结点;结点的层次:从根到该结点的层数〔根结点算第一层〕

树的深度(或高度):指所有结点中最大的层数

有序树:结点各子树从左至右有序,不能互换〔左为第一〕

无序树:结点各子树可互换位置。

森林:指m棵不相交的树的集合(例如删除A后的子树个数);二叉树的定义;二叉树根本特点:

结点的度小于等于2

有序树〔子树有序,不能颠倒〕;具有3个结点的二叉树可能有几种不同形态?普通树呢?

;为何要重点研究每结点最多只有两个“叉”的树?

二叉树的结构最简单,规律性最强;

可以证明,所有树都能转为唯一对应的二叉树,不失一般性;5.2案例引入;案例5.2:利用二叉树求解表达式的值

以二叉树表示表达式的递归定义如下:

〔1〕假设表达式为数或简单变量,那么相应二叉树中仅有一个根结点,其数据域存放该表达式信息;

〔2〕假设表达式为“第一操作数运算符第二操作数”的形式,那么相应的二叉树中以左子树表示第一操作数,右子树表示第二操作数,根结点的数据域存放运算符〔假设为一元运算符,那么左子树为空〕,其中,操作数本身又为表达式。;5.3树和二叉树的抽象数据类型定义;CreateBiTree(T,definition)

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

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

PreOrderTraverse(T)

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

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

InOrderTraverse(T)

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

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

PostOrderTraverse(T)

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

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

;5.4二叉树的性质和存储结构;19;20;21;22;性质5:对完全二叉树,假设从上至下、从左至右编号,那么编号为i的结点,其左孩子编号必为2i(2i≤n),其右孩子编号必为2i+1(2i+1≤n);其双亲的编号必为i/2。;二叉树的存储结构;1.二叉树的顺序存储结构;26;2.二叉树的链式存储结构;二叉链表;三叉链表;5.5遍历二叉树和线索二叉树;遍历二叉树;32;33;34;35;36;37;38;先序遍历算法;40;中序遍历算法;后序遍历算法;遍历算法的分析;44;2.根据遍历序列确定二叉树;例5.1一棵二叉树的中序序列和后序序列分别是BDCEAFHG和DECBHGFA,请画出这棵二叉树。

①由后序遍历特征,根结点必在后序序列尾部〔A〕;

②由中序遍历特征,根结点必在其中间,而且其左部必全部是左子树子孙〔BDCE〕,其右部必全部是右子树子孙〔FHG〕;

③继而,根据后序中的DECB子树可确定B为A的左孩子,根据HGF子串可确定F为A的右孩子;以此类推。;47;3.二叉树遍历算法的应用;(1)创立二叉树的存储结构—二叉链表

设二叉树中结点的元素为单字符。

按先序遍历的顺序建立二叉链表,T为指向根结点的指针,对于给定的一个字符序列,依次读入字符,从根结点开始,递归创立二叉树。

【算法步骤】

①读入字符ch

②如果ch是“#”,那么为空树;否那么执行:

申请一个结点空间T

将ch赋给T-data

递归创立T的左子树

递归创立T的右子树;voidCreateBiTree(BiTreeT〕

{ //先序创立二叉链表表示的二叉树T

cinch;

if(ch==’#’)T=NULL; //递归结束,建空树

Else

{

T=newBiTNode;T->data=ch; //生成根结点

CreateBiTree(T->lchild);//递归创立左子树

CreateBiTree(T->rchild);//递归创立右子树

文档评论(0)

liuzhouzhong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档