[2018年最新整理]Ch04-树.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文档。上传文档
查看更多
[2018年最新整理]Ch04-树

树 高文宇 gwyy@163.com §1 预备知识 树的定义:一棵树是一些节点的集合。这个集合可以是空集;若非空,则一棵树由称为根的节点r以及0个或多个非空的(子)树T1, ???, Tk,组成,这些子树总每一棵的根都被来自根r的一条有向边所连接。 有关树的术语 degree of a node ,For example, degree(A) = 3, degree(F) = 0. degree of a tree ,For example, degree of this tree = 3. parent children siblings ::= children of the same parent. leaf ( terminal node ) ::= a node with degree 0 (no children). 有关树的术语 path from n1 to nk ::= a (unique) sequence of nodes n1, n2, …, nk such that ni is the parent of ni+1 for 1 ? i k. length of path ::= number of edges on the path. depth of ni ::= length of the unique path from the root to ni. Depth(root) = 0. height of ni ::= length of the longest path from ni to a leaf. Height(leaf) = 0, and height(D) = 2. height (depth) of a tree ::= height(root) = depth(deepest leaf). ancestors of a node ::= all the nodes along the path from the node up to the root. descendants of a node ::= all the nodes in its subtrees. 树的实现 Tree 树的“孩子-兄弟”实现 Tree 树的遍历 先序遍历(先根遍历) 后序遍历(后根遍历) §2 二叉树 二叉树是有限的结点集合,这个集合或者是空,或者由一个根结点和两棵互不相交的称为左子树和右子树的二叉树组成。二叉树的定义是一种递归定义。 二叉树有五种基本形态,如下图所示,任何复杂的二叉树都是这五种基本形态的复合。 满二叉树和完全二叉树 满二叉树:在一棵二叉树中,如果所有分支结点都有左孩子结点和右孩子结点,并且叶结点都集中在二叉树的最下一层,这样的二叉树称为满二叉树。 完全二叉树:若二叉树中最多只有最下面两层的结点的度数可以小于2,并且最下面一层的叶结点 都依次排列在该层最左边的位置上,则这样的二叉树称为完全二叉树。 二叉树的性质 性质1 非空二叉树上叶结点数等于双分支结点数加1。即:n0=n2+1 性质2 非空二叉树上第i层上至多有2i-1个结点,这里应有i≥1。 性质3 高度为h的二叉树至多有2h-1个结点(h≥1)。 性质5 具有n个(n>0)结点的完全二叉树的高度为?log2n+1?或?log2n?+1。 二叉树与树、森林之间的转换 1.森林、树转换为二叉树 (1)在所有相邻兄弟结点(森林中每棵树的根结点可看成是兄弟结点)之间加一水平连线。 (2)对每个非叶结点k,除了其最左边的孩子结点外,删去k与其他孩子结点的连线。 (3)所有水平线段以左边结点为轴心顺时针旋转45度。 通过以上步骤,原来的森林就转换为一棵二叉树。一般的树是森林中的特殊情况,由一般的树转换的二叉树的根结点的右孩子结点始终为空,原因是一般的树的根结点不存在兄弟结点和相邻的树。 二叉树与树、森林之间的转换 2. 二叉树还原为森林、树 (1)对于一棵二叉树中任一结点k0,沿着k1右孩子结点的右子树方向搜索所有右孩子结点,即搜索结点序列k2,k3,…,km,其中ki+1为ki的右孩子结点(1≤i<m),km没有右孩子结点。 (2)删去k1,k2,…,km之间连线。 (3)若k1有双亲结点k,则连接k与ki(2≤i≤m)。 (4)将图形规整化,使各结点按层次排列。 二叉树的链式存储结构 在二叉树的链接存储中,结点的结构如下: 二叉树的先序遍历 void PreOrder(BTNode *b) /*先序遍历的递归算法*/ { if (b!=NULL) { printf(%c ,b-Element); /*访问根结点*/ PreOrder(b-Left); PreOrder(b-Right)

文档评论(0)

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

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

1亿VIP精品文档

相关文档