第12章程序设计基础.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文档。上传文档
查看更多
第12章程序设计基础

* 第十二章 二 叉 树 内 容 要 点 二叉树的基本概念 二叉树的遍历 二叉树的建立 A B C E F G H J K 12.0 树 D I 层次 1 2 3 4 结点的度(degree) 树的深度(depth) root leaf node A B C D E F G H I 12.1 二叉树的基本概念 二叉树是树结构的一种,属于非线性结构。 二叉树由根、左子树、右子树构成。 二叉树是递归定义的。 不存在度大于2的结点的树 6 L R 5 NULL NULL 3 NULL NULL 8 L R 4 L R 结点1 结点2 结点4 结点6 结点7 结点5 结点3 root 7 NULL NULL 9 NULL NULL 12.2 二叉树的遍历 (tree traversal) 按某条搜索路径,访问树中每个结点,使得每个结点 均被访问一次,而且仅被访问一次。 树或子树都存在根、左子树、右子树,先遍历谁? 1、前序法: (pre_order) 访问根; 遍历左子树; 遍历右子树; 2、中序法: (in_order) 遍历左子树; 访问根; 遍历右子树; 3、后序法: (post_order) 遍历左子树; 遍历右子树; 访问根; N L R 三种不同的方法: - d / a * e f b - + c 用二叉树表示表达式:(递归定义) a + b * ( c – d ) – e / f 遍历此二叉树: 1、前序法 – + a * b – c d / e f (前缀表示) 2、中序法 a + b * c – d – e / f (中缀表示) 3、后序法 a b c d – * + e f / – (后缀表示) 以中序法为例,采用递归算法。 定义 p 为指向二叉树根结点的指针:TREE *p; 定义子函数 LNR( p ) :中序遍历以 p 为根的二叉树 定义树的结构: struct TREE { int data; struct TREE *L, *R; }; A LNR(p) 中序遍历以p为根的二叉树 B 什么都不做 C p!=NULL p==NULL D LNR(p-L) 中序遍历p的左子树 E 访问p F LNR(p-R) 中序遍历p的右子树 建立二叉树的过程是一个“插入”的过程。 首先建立的是根结点,它起定位的作用。 从键盘接收数据来建立二叉树,第一个数据就是 这棵树的根的数据,之后再输入的数据,每一个都要 与根中数据作比较,以便确定该数据所在结点的插入 位置。 假定采用中序遍历方式,即:如果待插入结点的 数据比根结点数据小,则将其插入左子树,否则插入 右子树。 12.3 二叉树的建立 定义一个递归函数: 将 pNode 结点插入到 pRoot 所指向的树中。 void insert(TREE *pRoot, TREE *pNode) 其中,pNode 指向含有待插入数据的结点,pRoot 为树的根结点指针的别名。 insert(pRoot,pNode) pRoot=pNode; return; 根结点不空 根结点为空 pNode-data = pRoot-data insert(pRoot-R,pNode); 将pNode结点插入右子树 pNode-data pRoot-data insert(pRoot-L,pNode); 将pNode结点插入左子树 …… struct TREE { int data; struct TREE *L,*R; }; void insert(TREE *pRoot, TREE* pNode) { if (pRoot==NULL) { pRoot = pNode; return; } else { if (pNode-data = pRoot-data) insert( pRoot-L, pNode); // 插入左子树 else insert( pRoot-R, pNode); } // 插入右子树 } void print(TREE

文档评论(0)

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

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

1亿VIP精品文档

相关文档