第六章[树和二叉树].ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章[树和二叉树]

第6章 树和二叉树;树型结构是一类重要的非线性结构。 树结构在客观世界里是大量存在的,树在计算机领域中也有着广泛的应用。;A;结点——表示树中的元素,包括数据项及若干指向其子树的分支;A;6.2 二叉树; (a) 空二叉树;6.2.2 二叉树的性质; 性质2:深度为k的二叉树至多有2k-1个结点(k≥1)。; 性质3: 对任何一棵二叉树T,如果其终端结点数为n0,度为2的 结点数为n2,则n0=n2+1。;由于这些分支都是由度为1和2的结点射出的,所以有: B=n1+2n2 因此,N=B+1=n1+2n2+1 (6-2); 满二叉树;1;完全二叉树的特点; 性质5: 如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第?log2n ?+1层,每层从左到右),则对任一结点i(1≤i≤n),有:;图6.6 完全二叉树中结点i和i+1;图6.6 完全二叉树中结点i和i+1;图6.6 完全二叉树中结点i和i+1;图6.6 完全二叉树中结点i和i+1;1、顺序存储结构;a;a;typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree;;;用链表表示的二叉树中也会存在许多空链域。例如在含有n个结点的二叉链表中,共有2n个链域,实际用n-1链域(仅有n-1个分支),还有n+1个空链域。 可以利用这些空链域存储其它有用信息,从而得到另一种链式存储结构——线索链表。; 6.3 遍历二叉树和线索二叉树;二叉树是由三个基本单元组成:根结点、左子树和右子树。因此,若能依次遍历这三部分,便是遍历了整个二叉树。;先序遍历算法;A;若二叉树为空树,则空操作;否则,;A;后序遍历算法;A;所谓二叉树的层序遍历,是指从二叉树的第一层(根结点)开始,从上至下逐层遍历,在同一层中则按从左到右的顺序对结点逐个访问。;A;例如下图所示的二叉树表示下述表达式; (1)查询二叉树中某个结点; Status Preorder (BiTree T, TElemType x, BiTree p) { };算法基本思想:先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。 ; void CountLeaf (BiTree T, int count){ if ( T ) { if ((!T-lchild) (!T-rchild)) count++; // 对叶子结点计数 CountLeaf( T-lchild, count); CountLeaf( T-rchild, count); } } ;int CountLeaf (BiTree T) { if (!T ) return 0; if (!T-lchild !T-rchild) return 1; else{ m = CountLeaf( T-lchild); n = CountLeaf( T-rchild); return (m+n); } };int Count (BiTree T){ //返回指针T所指二叉树中所有结点个数 if (!T ) return 0; if (!T-lchild !T-rchild) return 1; else{ m = Count ( T-lchild); n = Count ( T-rchild); return (m+n+1); } } ;算法基本思想:首先分析二叉树的深度和它的左、右子树深度之间的关系;int Depth(BiTree T ) { /*返回二叉树的深度 */ if ( !T ) depthval = 0; else { ;A;Status CreateBiTree (BiTree T ){ /*按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,构造二叉链表表示的二叉树T */ ;3、遍历二叉树的非递归算法;void preorder(JD *r) /*先序遍

文档评论(0)

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

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

1亿VIP精品文档

相关文档