《Chapter--二叉搜索树-学时()》-课件设计(公开).ppt

《Chapter--二叉搜索树-学时()》-课件设计(公开).ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter11 搜索树 中国地质大学信息工程学院 内容提要 11.1 二叉搜索树 11.2 AVL树 11.3 红黑树 11.4 B-树 11.5 应用 查找表的分类 1、搜索树简介 可用于描述字典的数据结构: n个元素 跳表:进行搜索、插入或者删除操作所需要的平均时间为O(logn) ,而最坏情况下的时间为O(n); 散列:平均和最坏时间分别为O(1)和O(n),可适用于根据元素关键值进行的操作; 两者比较:使用跳表很容易对字典元素进行高效的顺序访问(如按照升序搜索元素),而散列却做不到这一点。 搜索树的引入 平衡搜索树:对一个n 元素的字典进行搜索、插入或者删除所需要的平均和最坏时间均为O(logn);并且所有字典元素能够在线性时间内按升序输出。 在搜索树中进行顺序访问时,搜索每个元素所需要的平均时间为O(1)。 搜索树既适用于根据元素关键值的操作,也适用于不按精确的关键值匹配进行字典操作的应用(比如寻找关键值大于k 的最小元素)。 2、二叉搜索树 散列无法提供较好性能的一些操作: 按关键值的升序输出字典元素:O(D+nlogn) 按升序找到第k个元素:O(n) 删除第k个元素:O(n) 相应平衡搜索树的操作复杂度: 按升序找到第k个元素:O(n) 按升序找到第k个元素:O(logn) 删除第k个元素:O(logn) (1)二叉搜索树(BST)的定义 1) 每个元素有一个关键值,并且没有任意两个元素有相同的关键值;因此所有的关键值都是唯一的。 2) 根节点左子树的关键值(如果有的话)小于根节点的关键值。 3) 根节点右子树的关键值(如果有的话)大于根节点的关键值。 4) 根节点的左右子树也都是二叉搜索树。 二叉搜索树-示例 带索引的二叉搜索树 在每个节点中添加一个LeftSize域。这个域的值是该节点左子树的元素个数加 1。 (2)BST的抽象数据类型 抽象数据类型BSTree { 操作: Create( ):创建一个空的二叉搜索树 Search(k, e):将关键值为k的元素返回到e中; 如果操作失败则返回false,否则返回true Insert(e):将元素e插入到搜索树中 Delete(k, e):删除关键值为k的元素并且将其返回到e中 Ascend( ):按照关键值的升序排列输出所有元素 } 带索引的BST-ADT描述 抽象数据类型IndexedBSTree { 操作: Create( ):产生一个空的带索引的二叉搜索树 Search(k, e):将关键值为k的元素返回到e中; IndexSearch(k, e):将第k个元素返回到e中 Insert(e):将元素e插入到搜索树 Delete(k, e):删除关键值为k的元素且将其返回到e中 IndexDelete(k, e):删除第k个元素并将其返回到e中 Ascend( ):按照关键值的升序排列输出所有元素 } (3)BST的类定义 templateclass E, class K 元素,关键值 class BSTree : public BinaryTreeE { public: bool Search(const K k, E e) const; BSTreeE,K Insert(const E e); BSTreeE,K Delete(const K k, E e); void Ascend() { InOutput(); } 中序升序输出 }; (4)BST-搜索 【思想】假设需要查找关键值为 k的元素,先从根开始。如果根为空,那么搜索树不包含任何元素,查找失败,否则将 k与根的关键值相比较: 如果 k小于根节点的关键值,则只需在左子树中搜索即可; 如果 k 大于根节点的关键值,则只需在右子树中搜索即可; 如果 k等于根节点的关键值,则查找成功,搜索终止! BST-搜索代码 templateclass E, class K bool BSTreeE,K::Search(const K k, E e) const { BinaryTreeNodeE *p = root; while (p) if (k p-data) p = p-LeftChild; else if (k p-data) p = p-RightChild; else { e = p-data; return true; }

您可能关注的文档

文档评论(0)

沙卡娜 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档