第6章特殊二叉树CPP.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文档。上传文档
查看更多
第6章特殊二叉树CPP

第六章 特殊二叉树 6.1 二叉搜索树 6.1.1 定义与概念 二叉搜索树(Binary Searching Tree)(又称二叉排序树(Binary Sorting Tree))或者是一棵空树;或者是一棵具有如下特性的非空二叉树: 若左子树非空,则左子树上所有结点的关键字均小于根结点的关键字; 若右子树非空,则右子树上所有结点的关键字均大于根结点的关键字。 (3) 左右子树也都是二叉搜索树。 特点:中序遍历序列有序。 6.1.2 二叉搜索树的二叉链表的存储结构 与一般二叉树存储结构相同: struct BTreeNode { ElemType data; BTreeNode *left; BTreeNode *right; }; 6.1.3 二叉搜索树的运算 1.构造一棵二叉搜索树—插入(6.1.3-3.) 【例】关键字序列为 (38, 26, 62, 94, 35, 50, 28, 55),构造一棵二叉搜索树的过程如下: 构造的过程就是不断插入的过程; 新结点总是作为终端结点插入的。 插入算法的思路: 设待插入结点的值(或关键字)为item。从根结点起将item与当前结点作比较: 如果item比当前结点小,则将当前结点的左孩子作为当前结点;否则将右孩子作为当前结点; 重复上述过程,直到当前结点为空。此时当前结点的双亲结点是插入点。 如果item比该双亲结点小,则将item作为其左孩子;否则作为其右孩子。 2. 建立二叉搜索树(利用插入算法) 形 参:BST-指向二叉搜索树的指针 a-数据源数组; n—数据数 void CreateBSTree(BTreeNode* BST, ElemType a[],int n) { BST=NULL; for (int i=0;in;i++) Insert1(BST,a[i]); } 3. 在二叉搜索树上的查找(6.1.3-1.) 从根结点起将item与当前结点作比较:如果相等,则查找成功,结束查找过程;否则   如果item比当前结点小,则将当前结点的左孩子作为当前结点;否则将右孩子作为当前结点; 重复上述过程,直到当前结点为空。如果当前结点为空,则查找不成功。 二叉搜索树的非递归查找算法(P214 .doc); 本算法与P195二叉树的查找算法相比(约32次,约6.5亿次) 4.从二叉搜索树中删除一个结点的算法思想(6.1.3-4.) 从二叉搜索树中删除一个结点之后,使其仍能保持二叉搜索树的特性。 设待删结点为p(p为指向待删结点的指针),其双亲结点为f,以下分三种情况进行讨论。 p结点为叶子结点 直接删除 (2) p结点只有左子树pL或只有右子树pR 直接用左子树或右子树替代p (3) p结点既有左子树pL又有右子树pR 1) 用p的右子树替代p; 2) 把p的左子树置于p的右子树的中序序列之前。 1) 用p的右子树替代p; 2) 把p的左子树置于p的右子树的中序序列之前。 6.2 堆 6.2.1 堆的定义 堆分为小根堆和大根堆两种,小根堆是有如下特性的一棵完全二叉树: (1) 若树根结点有左孩子,则根结点的值小于等于左孩子结点的值; (2) 若树根结点有右孩子,则根结点的值小于等于右孩子结点的值; (3) 以左、右孩子为根的子树又各是一个(小根)堆。 大根堆的定义与上类似,只要把“小于等于”改为“大于等于”即可。 堆所对应的完全二叉树的特点是:所有分支结点的值均不小于 (或不大于)其子女的值,即每棵子树根结点的值是最大(或最小)的。即堆顶元素是整个序列中最大(或最小)的元素。 堆来源于优先队列。 6.2.2 堆的抽象数据类型 6.2.3 堆的存储结构 由于堆是完全二叉树,所以适合用顺序存储。为此按层对各结点依次编号(从0开始)。 【注意】如果从0开始编号,则: 如果i0,则序号为i的结点的双亲结点的序号为? (i-1)/2 ? 如果编号为i的结点有左孩子,则其左孩子结点的序号为2i+1;如果有右孩子,则其右孩子结点的序号为2i+2。 【注意】如果从0开始编号,则: 如果i0,则序号为i的结点的双亲结点的序号为? (i-1)/2 ? 如果编号为i的结点有左孩子,则其左孩子结点的序号为2i+1;如果有右孩子,则其右孩子结点的序号为2i+2。 struct Heap { ElemType

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档