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

同济大学计算机编程C++ds6.pptVIP

  1. 1、本文档共177页,可阅读全部内容。
  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文档。上传文档
查看更多
同济大学计算机编程Cds6

树和森林的概念 树的定义 树是由 n (n ? 0) 个结点组成的有限集合。如果 n = 0,称为空树;如果 n 0,则 有一个特定的称之为根(root)的结点,它只有直接后继,但没有直接前驱; 除根以外的其它结点划分为 m (m ? 0) 个 互不相交的有限集合T0, T1, …, Tm-1,每个集合又是一棵树,并且称之为根的子树。 树的特点 每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继。 二叉树遍历 树的遍历就是按某种次序访问树中的结点,要求每个结点访问一次且仅访问一次。 设访问根结点记作 V 遍历根的左子树记作 L 遍历根的右子树记作 R 则可能的遍历次序有 前序 VLR 镜像 VRL 中序 LVR 镜像 RVL 后序 LRV 镜像 RLV 中序遍历 (Inorder Traversal) 中序遍历二叉树算法的框架是: 若二叉树为空,则空操作; 否则 中序遍历左子树 (L); 访问根结点 (V); 中序遍历右子树 (R)。 遍历结果 a + b * c - d - e / f 前序遍历 (Preorder Traversal) 前序遍历二叉树算法的框架是: 若二叉树为空,则空操作; 否则 访问根结点 (V); 前序遍历左子树 (L); 前序遍历右子树 (R)。 遍历结果 - + a * b - c d / e f 后序遍历 (Postorder Traversal) 后序遍历二叉树算法的框架是: 若二叉树为空,则空操作; 否则 后序遍历左子树 (L); 后序遍历右子树 (R); 访问根结点 (V)。 遍历结果 a b c d - * + e f / - 应用二叉树遍历的事例 后序游标类 为记忆走过的结点,设置一个工作栈: S.PopTim = 0, 1或2,表示第几次退栈,用以判断下一步向哪一个方向走。 后序遍历时,每遇到一个结点,先把它推入栈中,让 S.PopTim = 0。 在遍历其左子树前,改结点的 S.PopTim = 1,将其左子女推入栈中。在遍历完左子树后,还不能访问该结点,要继续遍历右子 二叉树的计数 由二叉树的前序序列和中序序列可唯一地确定一棵二叉树。 例, 前序序列 { ABHFDECKG } 和中序序列 { HBDFAEKCG }, 构造二叉树过程如下: 前序序列 { ABHFDECKG } 线索化二叉树 (Threaded Binary Tree) 通过中序遍历建立中序线索化二叉树 template class Type void ThreadTreeType :: InThread ( ThreadNodeType * current, ThreadNodeType * pre ) { if ( current != NULL ) { InThread ( current-leftChild, pre ); //递归, 左子树线索化 if ( current-leftChild == NULL ) { current-leftChild = pre; current-leftThread = 1; } //建立当前结点的前驱线索 if ( pre != NULL pre-rightChild == NULL ) { pre-rightChild = current; pre-rightThread = 1; } //建立前驱结点的后继线索 pre = current; //前驱跟上当前指针 InThread ( current-rightChild, pre ); //递归, 右子树线索化 } } template class Type void ThreadTreeType :: CreateInThread ( ) { ThreadNodeType *pre = NULL; //前驱指针 if ( root != NULL ) { //非空二叉树, 线索化 InThread ( root, pre ); //中序遍历线索化二叉树

文档评论(0)

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

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

1亿VIP精品文档

相关文档