16二叉搜索树.pptxVIP

  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文档。上传文档
查看更多
16二叉搜索树

二叉搜索树-引例10303525852090507588238040二叉搜索树,加入结点75后就不是二叉搜索树了二叉搜索树-定义二叉搜索树或者是一棵空树;或者是具有如下特性的二叉树:(1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值;(3)它的左、右子树也都分别是二叉搜索树。又称为二叉排序树、二叉查找树3466791021二叉搜索树-来源65481139751319213756647580889201234567891011折半查找判定树64369719889280135621753764二叉搜索树-来源5有序表折半查找过程,就是一棵二叉搜索树二叉搜索树类templateclass E, class Kclass BSTree : public BinaryTreeE { public: bool Search(const K k, E e) const; BSTreeE,K Insert(const E e); BSTreeE,K InsertVisit (const E e, void(*visit)(E u)); BSTreeE,K Delete(const K k, E e); void Ascend() {this-InOutput();}//this-???};查找操作若二叉搜索树为空,则查找不成功;否则1)若给定值等于根结点的关键字,则查找成功;2)若给定值小于根结点的关键字,则继续在左子树上进行查找;3)若给定值大于根结点的关键字,则继续在右子树上进行查找。p查找操作95908820505080909085403532305030403550808050 50 ,查找关键字35 ,90 ,95 查找操作从上述查找过程可见:在查找过程中,生成了一条查找路径:查找成功:从根结点出发,沿着左分支或右分支逐层向下直至关键字等于给定值的结点;查找不成功:从根结点出发,沿着左分支或右分支逐层向下直至指针指向空树为止。查找代码templateclass E, class Kbool BSTreeE,K::Search(const K k, E e) const{// Search for element that matches k. // pointer p starts at the root and moves through // the tree looking for an element with key k BinaryTreeNodeE *p = this-root; while (p) {// examine p-data if (k p-data) p = p-LeftChild; else if (k p-data) p = p-RightChild; else {// found element e = p-data; return true;} } return false;}插入操作若二叉搜索树为空树,则新插入的结点为新的根结点; 否则, 新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。插入代码1templateclass E, class KBSTreeE,K BSTreeE,K::Insert(const E e){// Insert e if not duplicate. BinaryTreeNodeE *p = this-root, // search pointer *pp = 0;// parent of p // find place to insert while (p) {// examine p-data pp = p;// move p to a child if (e p-data) p = p-LeftChild; else if (e p-data) p = p-RightChild; else throw BadInput(); // duplicate } // get a node for e and attach to pp BinaryTreeNodeE *r = new BinaryTreeNodeE (e); if (this-root) {// tree not empty if (e pp-data) pp-LeftChild = r; else pp-RightChild = r;} else // insertion into empty tree this-root = r; return *this;}插入代码2templateclass E, class KBSTreeE,K BSTreeE,K::InsertVisit (const E e

文档评论(0)

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

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

1亿VIP精品文档

相关文档