编写代码选题十二:动态查找表   【问题描述】 利用二叉排序树完成动态查找表的建立、指定关键字的查找、插入与删除指定关键字结点。 【任务要求】 算法输入:指定一组数据。 算法输出:显示二叉排序树的中序遍历结果、查找成功与否的信息、插入和删除后的中序遍历结果(排序结果)。 算法要点:二叉排序树建立方法、动态查找方法,对树进行中序遍历。 【测试数据】 自行设定,注意边界等特殊情况。

时间: 2024-03-13 17:42:52 浏览: 21
以下是使用 C++ 编写的二叉排序树代码,可以实现动态查找表的建立、指定关键字的查找、插入与删除指定关键字结点: ```cpp #include <iostream> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class BinarySearchTree { public: BinarySearchTree() : root(NULL) {} void insert(int val) { if (!root) { root = new TreeNode(val); return; } TreeNode* cur = root; while (cur) { if (val < cur->val) { if (!cur->left) { cur->left = new TreeNode(val); return; } cur = cur->left; } else if (val > cur->val) { if (!cur->right) { cur->right = new TreeNode(val); return; } cur = cur->right; } else { return; // already exists } } } void remove(int val) { root = removeHelper(root, val); } bool search(int val) { TreeNode* cur = root; while (cur) { if (val < cur->val) { cur = cur->left; } else if (val > cur->val) { cur = cur->right; } else { return true; } } return false; } void inorderTraversal() { inorderHelper(root); cout << endl; } private: TreeNode* root; TreeNode* removeHelper(TreeNode* root, int val) { if (!root) { return NULL; } if (val < root->val) { root->left = removeHelper(root->left, val); } else if (val > root->val) { root->right = removeHelper(root->right, val); } else { if (!root->left && !root->right) { delete root; return NULL; } else if (!root->left) { TreeNode* right = root->right; delete root; return right; } else if (!root->right) { TreeNode* left = root->left; delete root; return left; } else { TreeNode* successor = root->right; while (successor->left) { successor = successor->left; } root->val = successor->val; root->right = removeHelper(root->right, successor->val); } } return root; } void inorderHelper(TreeNode* root) { if (!root) { return; } inorderHelper(root->left); cout << root->val << " "; inorderHelper(root->right); } }; int main() { BinarySearchTree bst; // insert nodes bst.insert(5); bst.insert(3); bst.insert(7); bst.insert(2); bst.insert(4); bst.insert(6); bst.insert(8); // inorder traversal cout << "Inorder Traversal: "; bst.inorderTraversal(); // search nodes cout << "Search 6: " << (bst.search(6) ? "Found" : "Not Found") << endl; cout << "Search 9: " << (bst.search(9) ? "Found" : "Not Found") << endl; // remove nodes bst.remove(3); bst.remove(5); // inorder traversal after removal cout << "Inorder Traversal after Removal: "; bst.inorderTraversal(); return 0; } ``` 使用上述代码可以完成动态查找表的建立、指定关键字的查找、插入与删除指定关键字结点。

相关推荐

最新推荐

recommend-type

《数字逻辑》课程设计选题.docx

选题一:多模式彩灯(一) 1 选题二:多模式彩灯(二) 2 选题三:简易电梯控制器 3 选题四:计算器1 4 选题五:病房呼叫电路 5 选题六:密码锁 6 选题七:电子钟 7 选题八:自动售货机 8 选题九:多路抢答器 9 选题...
recommend-type

进程间同步互斥问题——银行柜员服务问题1

1. 某个号码只能由一名顾客取得 2. 不能有多于一个柜员叫同一个号 3. 有顾客的时候,柜员才叫号 4. 无柜员空闲的时候,顾客需要等待 5. 无顾客的时候,
recommend-type

信息管理与信息系统论文选题

一、信息管理与信息系统 1、信息用户的信息素养现状调查 2、基于RSS的图书馆推送服务系统的研究 3、基于Web2.0的个性化信息服务模式研究 4、试论竞争情报对企业竞争力的影响 5、数据挖掘技术在竞争情报系统中的应用...
recommend-type

大创-大学生创新创业训练计划项目申报书-软件-基于机器学习的网络入侵检测与具备自动防御的SDN安全网络体系研究-参考

随着对 SDN 架构开发和部署的不断深入,各类安全性问题也逐渐成为制约SDN 发展的关键因素。业界针对 SDN 安全的研究方向主要分为两大类:一类是使用 SDN 来加强和提升网络安全,主要是指 SDN 给传统的网络安全研究所...
recommend-type

线性表 实验报告.docx

选题3:(易)编写算法实现二个有序的线性表的合并问题(存储结构可选:顺序表/单链表)。 参考课件“chap002线性表.ppt”相关例题。 选题4:(难)运用单向循环链表实现约瑟夫环的问题。 参考实验指导书“实验题 4...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。