第4章_树的基本概念.pptVIP

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

4.1 树的基本概念 客观世界中的许多事物的关系可以用树来描述,如人类社会中家族成员之间的血缘关系,以英国女王家族为例可表示成如下图所示。 上图看上去很像一棵倒置的树,树型结构便由此而得名。 树的递归定义 树(tree)是n(n≥0)个结点的有限集合T。 当n=0时称为空树,否则称为非空树。 在任一非空树中,①有且仅有一个称为树的根的结点;②除根结点之外的其余结点可分为m(m≥0)个互不相交的集合T1,T2,…,Tm,其中每个集合本身又都是一棵树,并且称为根的子树。 树的非递归定义 树的非递归定义可以叙述为:称数据结构tree(D,R)为树,则R中只有一个关系,且满足以下条件: (1) 有且仅有一个没有前趋的结点w,称为树的根; (2) 除根w外的每一个结点都有且只有一个前趋; (3) 对于除根w外的每一个结点K,都有一个从根w到k的一个结点序列K0(w),K1,K2,…,Ki-1,Ki,…,Kn(k)(n≥1),其中Ki是Ki-1的后继。 树的表示 通常树的表示方法有树形表示、嵌套集合表示、凹入表示和广义表表示四种,如下图所示: 树常用的基本术语 树的结点 结点的度 叶子或终端结点 分支结点或非终端结点 树的度 结点的层次 树的深度或高度 有序树和无序树 森林 4.2 二叉树 二叉树的概念 二叉树的性质 二叉树的存储结构 二叉树的简单运算实现 二叉树的概念 二叉树的定义 二叉树(binary tree)是n(n≥0)个结点的有限集合,它或者(n=0时)为空树,或者(n>0时)由一个根结点及两棵互不相交的分别称为根的左子树和右子树的二叉树组成。 二叉树与树是两个不同的概念,它不是树的特殊情况;这是因为二叉树的子树有左右之分,而树的子树不必区分次序。 二叉树与度为2的有序树也是不同的概念;因为对于二叉树的子树而言,要么是根的左子树,要么是根的右子树,即使只有一棵子树也要区分是左是右;而度为2的有序树中,当一个结点有两棵子树时有左右之分,而只有一棵子树时就无左右之分。 二叉树的五种基本形态 二叉树可以是空树,根也可以有空的左子树、空的右子树或左右子树均为空,因此二叉树有五种基本形态,如下图所示: 二叉树的基本运算 Init SetNull Root Parent Lchild Rchild Create AddChild DeleteChild Traverse 二叉树的性质 二叉树的第i(i≥1)层上至多有2i-1个结点 深度为k的二叉树至多有2k-1个结点(k≥1) 对任意一棵二叉树,若终端结点数为n0,度为2的结点数为n2,则n0=n2+1 满二叉树和完全二叉树 满二叉树(full binary tree)是指深度为k且有2k-1个结点的二叉树。 完全二叉树(complete binary tree)是指深度为k的、有n个结点的二叉树,当且仅当它的每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应。 二叉树的性质(续) 具有n 个结点的完全二叉树的深度为 对于具有n个结点的完全二叉树,如果按照自上而下自左至右的顺序对所有结点从1到n编号,则对于任意的序号为i的结点有: 如果i=1,则结点i是根结点,无双亲;如果i>1,则结点i的双亲结点编号为 。 如果2i<=n,则结点i的左孩子编号为2i;否则无左孩子。 如果2i+1<=n,则结点i的右孩子编号为2i+1;否则无右孩子。 如果i为奇数且不为1,则结点i的左兄弟编号为i-1;否则无左兄弟。 如果i为偶数且小于n,则结点i的右兄弟编号为i+1;否则无右兄弟。 二叉树的顺序存储结构 二叉树的顺序存储是用一组连续的存储单元存储二叉树中的数据元素 二叉树的链式存储结构 二叉树的链式存储结构是指用链表来存储二叉树,用链指针来指示元素间的逻辑关系。 常用的链式存储方法有双链法和三链法两种。 所谓双链法即二叉链表表示法,它为每一个结点设置两个指针域,分别指向该结点的左子树和右子树;当无左子树或右子树时,其指针域值为NULL(或∧)。其结点结构如下: 其中:data域存放结点的数据信息,lchild域存放指向左孩子的指针,rchild域存放指向右孩子的指针。 若需要频繁查找双亲或祖先,二叉链表就不太方便,需要由根结点开始向下查找,其效率较低。 解决这一类问题的办法是采用三链法,即三叉链表表示法,增加一个指针域用来指向双亲结点。其结点结构如下: 其中:parent是存放指向双亲结点的指针域。 三叉链表表示法既便于查找孩子结点,又便于查找双亲结点,这种方便是以增加存储开销为代价的。 二叉树的类型定义 typedef int Elemtype; typedef struct Node

文档评论(0)

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

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

1亿VIP精品文档

相关文档