Data Structure--Binary Tree教材.ppt

  1. 1、本文档共95页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* Copyright 2004@ by Li Rui * ?先左后右双旋转 h h h-1 h A B C D E F G 插入 (a)F子树插入结点 高度变为h - 2 1 - 1 h h h-1 h A B C D E F G (b)绕E,将B 逆时针转后 h h h-1 h A B C D E F G (c)绕E,将A 顺时针转后 0 3、平衡化旋转示例 二、平衡化旋转 Copyright 2004@ by Li Rui * ?先右后左旋转 h h h-1 h A B C D E F G 插入 (a)G子树插入结点 高度变为h 2 1 - 1 h h h-1 h A B C D E F G (b)绕D,C顺时 针转之后 h h h-1 h A B C D E F G (c)绕D,A逆时 针转之后 0 3、平衡化旋转示例 二、平衡化旋转 Copyright 2004@ by Li Rui * 三、AVL树的建立 ?对于一组关键码的输入序列,从空开始不断插入结点,最后构成AVL树 ?每插入一个结点后就应判断从该结点到根的路径上有无结点发生不平衡 ?如有不平衡问题,利用旋转方法进行树的调整,使之平衡化 ?建AVL树过程是不断插入结点和必要时进行平衡化的过程 Copyright 2004@ by Li Rui * BST、AVL树在Mini数据库中的应用 Copyright 2004@ by Li Rui * Copyright 2004@ by Li Rui * 5.7 堆(Heap) 一、堆的定义 1、什么是堆? ◆若有n个关键字的集合K={k0,k1,k2, …,kn-1}将其所有元素按完全二叉树的顺序存贮方式存于一个一维数组中,并且满足以下条件,则该集合称为最小堆(或最大堆)。 ki≤k2i+1和ki≤k2i+2 或 ki≥k2i+1和ki≥k2i+2 (其中,i = 0,1, …?(n – 2) / 2? ) ◆举例 09 17 65 23 45 78 87 53 31 0 1 2 3 4 5 6 7 8 最小堆 87 78 53 45 65 09 31 17 23 0 1 2 3 4 5 6 7 8 最大堆 09 17 65 23 45 78 87 53 31 0 1 2 3 4 5 6 7 8 堆顶元素值最小 87 78 53 45 65 09 31 17 23 0 1 2 3 4 5 6 7 8 堆顶元素值最大 Copyright 2004@ by Li Rui * 2、最小堆的类声明 template class Elem,class Comp class MinHeap { private : Elem * heap; //存放堆元素的数组 int n; //堆当前元素个数 int size; //堆最多允许元素个数 void siftdown (int i) public : MinHeap (Elem* h, int num ,int max) //构造堆 {Heap=h; n=num; size=max; buildHeap();} int heapsize() const {return n;} ~MinHeap( ) {delete [ ] heap;} bool Insert (const Elem ); bool RemoveMin (Elem ); bool isLeaf(int pos) const{return (pos=n/2)(posn)} int leftchild(int pos) const {return pos*2+1;} int rightchild(int pos) const {return pos*2+2;} Copyright 2004@ by Li Rui * int parent(int pos) const{return (pos-1)/2;} bool remove(int, Elem); void buildHeap() { for(int i=n/2-1; i=0; i--) siftdown(i); } }; Copyright 2004@ by Li Rui * 二、堆的建立 1、自下向上逐步调整建堆的举例 i j 53 17 78 09

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档