二叉树的遍历和应用演示文稿.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 递归与效率 * 顺序结构的存储的树,存在遍历的难点吗? * 顺序结构的存储的树,存在遍历的难点吗? * 怎样从顶部开始逐层打印二叉树结点 数据 * 首先 找到根结点 前序 知道 A 是root 中序中 A 把串分为两半 * 数目数目,定完全二叉树形状 从树的左下脚开始填空(依次填序列) * 【P94例5.3下面两端】 一段讲 函数的输入项 下一段讲 preorder函数 * 通过例子说明,算法基本思想和算法步骤(详细设计,伪代码)是有区别的 void CountLeaf (BiTree T, int count) 那么这样递归问题1的答案是 Count=0初始 统计二叉树(当前二叉树,当前以及遍历过的二叉树中叶子节点的个数)= 先序 统计二叉树(当前二叉树的左子树,当前以及遍历过的二叉树中叶子节点的个数) 先序 统计二叉树(当前二叉树的右子树,当前以及遍历过的二叉树中叶子节点的个数) 基例 如果二叉树是空的,当前以及遍历过的二叉树中叶子节点的个数不变 如果访问二叉树的当前节点(根结点)是空的,如果是当前节点的度是0(叶子节点),当前以及遍历过的二叉树中叶子节点的个数加1 当前以及遍历过的二叉树中叶子节点的个数 用 计数器 表示 int CountLeaf (BiTree T) 统计二叉树叶子节点个数=统计(二叉树根结点左子树)叶子节点个数 +统计(二叉树根结点右子树)叶子节点个数 // Return the number of nodes in the tree template class Elem int count(BinNodeElem* subroot) { if (subroot == NULL) return 0; // Nothing to count return 1 + count(subroot-left()) + count(subroot-right()); } * 周游算法和访问处理结点的关系 * * 不同的定义方法相应有不同的存储结构的建立算法 讲来个例子 一个是抽象是树,用树的顺序存储法 一个是两个(必须要两组)一维的串,用树的链式结构存储 * 能实现吗? 怎么把树型结构,作为输入呢,如何输入? * 来源于《数据结构与算法》 Void PreInOrd * * 若该结点的左子树不空, 则Lchild域的指针指向其左子树, 且左标志域的值为“指针 Link”; 否则,Lchild域的指针指向其“前驱”, 且左标志的值为“线索 Thread” 。 若该结点的右子树不空, 则rchild域的指针指向其右子树, 且右标志域的值为 “指针 Link”; 否则,rchild域的指针指向其“后继”, 且右标志的值为“线索 Thread”。 * pre指向当前访问的、指针p(书中的当前二叉树的根节点)所指结点的前驱。 就是pre指向中序遍历序列 的前面一个节点 * 中序遍历 每访问一个结点时,做三个事情 1.判断P(当前结点)的左孩子,前驱 2.判断Pre(当前结点的前驱,也就是刚刚访问的节点)的右孩子,定后继 3,改变Pre * 输入二叉树 T(根结点) 申请一个新树节点的空间(作为线索二叉树的头结点)记为Thrt Thrt的Ltag赋值为Link, Thrt的Rtag赋值为Thread,其rchild指向Thrt 如果T为空,则Thrt的lchild指向Thrt 否则 Thrt的lchild指向T ; Thrt的地址赋值给pre 开始中序线索化(T) Pre的rchild指向Thrt ;Pre的Rtag赋值为Thread Thrt的lchild指向Pre ---------------------------- * * 实现树的最简单方法就是对每个结点只保存一个指针域指向其父结点。 父指针表示法的说明【P128 图6.5】 很明显,这种实现并非出于一般性的目的,因为。。。【P126最后一段】 * 等价类的例子: 图的连通分支Connected components in graphs 点聚集Point clustering ---- 判断两个结点是否能到达同一个根结点(在同一棵树中) (1判断两个节点是否在同一个集合中) * Union/find算法(并查算法) 查找一个给定结点的根结点的过程称为FIND 归并两个树(集合)的过程称为Union * Initially, all objects are in separate sets (equivalence classes). 10个结点分别在10个独立等价类中的初始结构; (b) shows the result

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档