《数据结构用c语言描述》第六章.j.pptxVIP

  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文档。上传文档
查看更多
第六章树和二叉树;树的概念和基本术语;A;树的基本术语;二叉树 (Binary Tree);性质1 在二叉树的第 i 层上至多有 2i -1个结点。(i 1) [证明用归纳法];性质2 深度为k 的二叉树至多有 2 k-1个结点(k 1)。;性质3 对任何一棵二叉树T, 如果其叶结 点数为n0, 度为2的结点数为n2,则n0=n2+1.证明:若度为1的结点有n1 个,总结点个数为n,总边数为e,则根据二叉树的定义, n = n0 + n1 + n2 e = 2n2 + n1 = n - 1;两种特殊形态的二叉树;2;性质4 具有n (n;性质5 如将一棵有n个结点的完全二叉树自顶向下,同一层自左向右连续给结点编号 1, 2, …, n,则有以下关系:;完全二叉树 的顺序表示;·链表表示;二叉树链表表示的示例;三叉链表的静态结构;typedef char datatype;//结点数据类型;介绍按完全二叉树的层次顺序,依次输入结点信息建立二叉树的算法。 算法的基本思想: 1、依次输入结点信息,若输入的结点不是虚结点,则建立一个新结点。 2、若新结点是第一个结点,则令其为根结点;否则作为孩子连接到其双亲结点上。 3、重复上述过程,至到输入结束信息为止。;为此,设置一个指针类型的数组队列,保存已输入结点的地址。;bitree *Q[maxsize]; bitree *CREATREE( );rear + + ; Q[rear] = s ;;二叉树遍历;· 中序遍历二叉树算法的定义: 若二叉树为空,则空操作; 否则;void InOrder ( bitree *t) { if ( t != NULL ) { InOrder ( t-lchild ); printf(“\t%c\n”, t-data); InOrder ( t-rchild ); } };访问根结点(D); 前序遍历左子树(L); 前序遍历右子树(R)。;·前序遍历二叉树的递归算法;后序遍历右子树(R); 访问根结点(D)。;·后序遍历二叉树的递归算法:;int Count ( bitree *T ) { if ( T == NULL ) return 0; else;int Leaf_Count(Bitree *T) {//求二叉树中叶子结点的数目 if(!T) return 0; //空树没有叶子 else if(!T-lchild!T-rchild) return 1; //叶子结点 else return Leaf_Count(T.lchild)+Leaf_Count(T.rchild); 左子树的叶子数加上右子树的叶子数 };int Height ( bitree * T ) { int m, n ; if ( T == NULL ) return -1; else { m = Height ( T-lchild ); n = Height ( T-rchild ); return (m n) ? m+1 : n+1; } };4. 复制二叉树(递归算法);5. 判断二叉树等价(递归算法);中序遍历二叉树(非???归算法)用栈实现;void InOrder ( bitree *T );前序遍历二叉树(非递归算法)用栈实现;void PreOrder( bitree *T ) { stack *S; SETNULL(S); //递归工作栈 bitree * p = T; Push (S, NULL); while ( p != NULL ) { printf (“%c\n”, p-data ); if ( p-rchild != NULL ) Push ( S, p-rchild ); if ( p-lchild != NULL );·后序遍历二叉树(非递归算法)用栈实现;·void PostOrder ( BinTree T ) {;while ( continue !StackEmpty(S) ) { Pop (S, w); p = w.ptr;;练习:交换二叉树各结点的左、右子树;void unknown ( bitree * T ) { bitree *p = T, *temp; while ( p != NULL ) { temp = p-lchild; p-lchild = p-rchild; p-rchild = temp; unknown ( p-lchild ); p = p-rchild; } };使用栈消去递归算法中的两个递归语句;if ( p-rchild != NULL ) push (S, p-rchild ); if ( p-lchild != NULL ) push (S, p-lchild );;ltag=0, lta

文档评论(0)

158****0159 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档