- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九讲动态搜索-数据结构
* 计算机科学与技术(本科)专业 ● 二叉搜索树 ● AVL树 §7.3 二叉搜索树(Binary Search Tree) 一、基本概念 1、定义——或是空、或是具有下列性质的二叉树: ? 每个结点有一个作为搜索依据的关键码 ? 左子树上所有关键码小于根结点关键码 ? 右子树上所有关键码大于根结点关键码 2、举例 中序遍历结果: 09,17,23,45,53,65,78,81,87,94 显然中序遍历是有序的,故又称二叉排序树。 53 65 81 87 09 45 23 17 78 94 一、基本概念 3、BST是基于二叉树的动态搜索结构,其删除和插入结点可能要改变树的结构。 4、BST类定义特点 ? 类定义基于二叉链存贮表示 ? 与一般二叉树类定义十分相似 ? 可以继承一般二叉树类的定义 ? 基本运算Find, Insert 和 Remove 都用递归实现所以在类定义中同时包括私有和公用两种性质的声明 二、BST上的搜索 1、基本方法 ? 从根开始将给定值 x 与结点值进行比较 ? 若 x 小,沿着左子树继续搜索 ? 若 x 大,沿着右子树继续搜索 ? 若与 x 等则成功返回结点地址,若为空则失败 2、举例 ? x = 23 53 65 81 87 09 45 23 17 78 94 成功,比较次数为4 ? x = 88 失败,比较次数为4 ? 比较次数不大于 h + 1 3、递归算法 template class Type BStNodeType * BSTType :: Find (Type x, BStNodeType * prt) { //私有函数 if (prt = = NULL) return NULL; else if (x prt - data) return Find (x, prt - leftChild); else if (x prt - data) return Find (x, prt - rightChild); else return prt; } 返回时是返回到上一层调用处的下一条语句去执行 ? 但该算法的递归调用语句都在程序的最尾,称为尾递归 ? 因为是最尾语句,程序结束,不必用栈保存返回地址和 局部变量的值 ? 该算法可以不用栈,采用迭代方法改写成非递归程序 二、BST上的搜索 4、迭代算法 template class Type BStNodeType * BSTType :: Find (Type x, BStNodeType * prt) { if (prt != NULL) { BStNodeType * temp = prt; while (temp != NULL) { if (temp - data = = x) return temp; if (temp - data x) temp = temp - rightChild; else temp = temp - leftChild; }} return NULL; } ? 一般双向尾递归或单向递归的算法,都可利用迭代方 法, 不使用栈将其改为非递归过程 二、BST上的搜索 三、BST中的插入 1、方法 ? 先搜索BST中有无该结点,只有无才插入 ? 插入是作为叶子插入,插入后仍满足BST ? 插入位置应是搜索操作停止(指针ptr为空)的地方 2、算法 template class Type void BSTType :: Insert (const Type x, BStNodeType * ptr) { //私有函数 if (ptr = = NULL) { ptr = new BStNode Type (x);} else if (x ptr - data) Insert (x, ptr - leftChild); else if (x ptr - data) Insert (x, ptr - rightChild); else cout Node existed; } 3、BST的建立 ? 逐次输入关键码序列建一棵BST,是从空开始逐步插入结点 ? 每次从根开始搜索插入位置,然后将新结点作为叶子插入 ? 关键码集合相同但输入序列不同得到的BST也不同 若输入次序: 81 , 65 , 78 , 94 , 87 , 88 , 23 , 45 , 09 , 17 , 53
您可能关注的文档
- 试卷代号1012-涪陵广播电视大学.doc
- hfsschap6.doc-微波eda网.doc
- 华师大一附中,函数方程的综….doc
- cadencepcb软件大学计划.doc
- 一、基于高斯消元法的三对角矩阵lu分解-中文word文档库.doc
- 实验一割圆术、生长模型.doc
- thecandidesystemformachinetranslation.doc
- 第二节井筒气液两相流基本概念.doc
- 移动应用自动化测试--现状与方向-深圳软件园.doc
- a;電腦與資訊科技(會考課程)核心單元第四部分.ppt
- 《GB/T 32879-2025电动汽车更换用电池箱连接器》.pdf
- 中国国家标准 GB/T 21649.2-2025粒度分析 图像分析法 第2部分: 动态图像分析法.pdf
- 中国国家标准 GB/T 20899.9-2025金矿石化学分析方法 第9部分:碳量的测定.pdf
- 《GB/T 20899.9-2025金矿石化学分析方法 第9部分:碳量的测定》.pdf
- GB/T 20899.9-2025金矿石化学分析方法 第9部分:碳量的测定.pdf
- 《GB/T 33820-2025金属材料 延性试验 多孔状和蜂窝状金属高速压缩试验方法》.pdf
- GB/T 33820-2025金属材料 延性试验 多孔状和蜂窝状金属高速压缩试验方法.pdf
- 中国国家标准 GB/T 33820-2025金属材料 延性试验 多孔状和蜂窝状金属高速压缩试验方法.pdf
- GB/T 45910-2025信息技术 生物特征识别模板保护方案的性能测试.pdf
- 《GB/T 45910-2025信息技术 生物特征识别模板保护方案的性能测试》.pdf
最近下载
- 动量定理精选习题+答案.pdf VIP
- 2025江苏盐城市黄海金融控股集团有限公司博士后创新实践基地研究人员招聘2人笔试备考题库及答案解析.docx VIP
- 2025江苏盐城市黄海金融控股集团有限公司博士后创新实践基地研究人员招聘2人笔试参考题库附答案解析.docx VIP
- 2025江苏盐城市黄海金融控股集团有限公司博士后创新实践基地研究人员招聘2人笔试模拟试题及答案解析.docx VIP
- 2025江苏盐城市黄海金融控股集团有限公司博士后创新实践基地研究人员招聘2人考试备考试题及答案解析.docx VIP
- 教师资格证面试结构化面试真题及解析(幼儿园).pdf VIP
- KYN61-40.5型开关柜技术规范书.docx VIP
- 夜市承包经营协议书.docx VIP
- 2025江苏盐城市黄海金融控股集团有限公司博士后创新实践基地研究人员招聘2人考试备考题库及答案解析.docx VIP
- 2025届广东省深圳实验学校高中部高三第二次联考化学试卷含解析.doc VIP
文档评论(0)