1.编写顺序查找程序; 2.编写二分查找程序; 3.编写建立二叉排序树的程序; 4.编写在二叉排序树上的查找、插入、删除结点的程序; 5.编写使二叉排序树中序输出的程序; 6.设计一个选择式菜单,一级菜单形式如下: 查找子系统 **************************************** * 1------顺 序 查 找 * * 2------二 分 查 找 * * 3------二 叉 排 序 树 * * 0------返 回 * **************************************** 请选择菜单号(0--3):。

时间: 2023-07-06 12:37:09 浏览: 50
好的,这是一个比较复杂的问题,需要较长的代码实现。以下是一个可能的Java实现,供您参考: ``` import java.util.Scanner; // 定义二叉排序树结点类 class BSTNode { int key; BSTNode left; BSTNode right; public BSTNode(int key) { this.key = key; left = null; right = null; } } // 定义二叉排序树类 class BST { private BSTNode root; public BST() { root = null; } // 插入结点 public void insert(int key) { root = insert(root, key); } private BSTNode insert(BSTNode node, int key) { if (node == null) { node = new BSTNode(key); return node; } if (key < node.key) { node.left = insert(node.left, key); } else { node.right = insert(node.right, key); } return node; } // 删除结点 public void delete(int key) { root = delete(root, key); } private BSTNode delete(BSTNode node, int key) { if (node == null) { return node; } if (key < node.key) { node.left = delete(node.left, key); } else if (key > node.key) { node.right = delete(node.right, key); } else { if (node.left == null) { node = node.right; } else if (node.right == null) { node = node.left; } else { BSTNode temp = findMin(node.right); node.key = temp.key; node.right = delete(node.right, temp.key); } } return node; } private BSTNode findMin(BSTNode node) { while (node.left != null) { node = node.left; } return node; } // 查找结点 public boolean search(int key) { return search(root, key); } private boolean search(BSTNode node, int key) { if (node == null) { return false; } if (key == node.key) { return true; } else if (key < node.key) { return search(node.left, key); } else { return search(node.right, key); } } // 中序遍历输出 public void inorder() { inorder(root); } private void inorder(BSTNode node) { if (node != null) { inorder(node.left); System.out.print(node.key + " "); inorder(node.right); } } } // 主程序 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); BST bst = new BST(); int choice = -1; while (choice != 0) { // 显示菜单 System.out.println("查找子系统"); System.out.println("****************************************"); System.out.println("* 1------顺 序 查 找 *"); System.out.println("* 2------二 分 查 找 *"); System.out.println("* 3------二 叉 排 序 树 *"); System.out.println("* 0------返 回 *"); System.out.println("****************************************"); System.out.print("请选择菜单号(0--3):"); choice = scanner.nextInt(); switch (choice) { case 1: // 顺序查找 System.out.print("请输入要查找的数:"); int key = scanner.nextInt(); int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; boolean found = false; for (int i = 0; i < arr.length; i++) { if (arr[i] == key) { found = true; break; } } if (found) { System.out.println("找到了"); } else { System.out.println("没找到"); } break; case 2: // 二分查找 System.out.print("请输入要查找的数:"); key = scanner.nextInt(); arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int low = 0; int high = arr.length - 1; found = false; while (low <= high) { int mid = (low + high) / 2; if (arr[mid] == key) { found = true; break; } else if (arr[mid] < key) { low = mid + 1; } else { high = mid - 1; } } if (found) { System.out.println("找到了"); } else { System.out.println("没找到"); } break; case 3: // 二叉排序树 System.out.print("请输入要插入的数(以0结束):"); key = scanner.nextInt(); while (key != 0) { bst.insert(key); System.out.print("请输入要插入的数(以0结束):"); key = scanner.nextInt(); } System.out.print("请输入要查找的数:"); key = scanner.nextInt(); found = bst.search(key); if (found) { System.out.println("找到了"); } else { System.out.println("没找到"); } System.out.print("请输入要删除的数:"); key = scanner.nextInt(); bst.delete(key); bst.inorder(); System.out.println(); break; case 0: // 返回 break; default: System.out.println("输入错误,请重新输入"); break; } } scanner.close(); } } ```

相关推荐

最新推荐

recommend-type

详解Java编写并运行spark应用程序的方法

主要介绍了详解Java编写并运行spark应用程序的方法,内容详细,结合了作者实际工作中的问题进行具体分析,具有一定参考价值。
recommend-type

怎样在linux下编写C程序并编译执行

一、Hello, world!在linux下输入:(以hello.c为例)首先选中文件要保存的路径(如:cd work)vi hello.c(要编辑的文件名)输入程序:# includeint main(void){p...
recommend-type

SecureCRT脚本编写方法.pdf

文档涵盖了secureCRT脚本编写说明和例程,新手必备,包含:常用函数,自动化脚本编写,多会话操作等,均包含实例。
recommend-type

表驱动LL(1)语法分析程序.docx

(1)根据LL(1)分析法编写一个语法分析程序,输入文法的FIRST(α)和FOLLOW(U)集,由程序自动生成文法的预测分析表。 (2)所开发的程序可适用于不同的文法和任意输入串,且能判断该文法是否为LL(1)文法。 (3)对输入的...
recommend-type

实战 Java 存储过程的编写及在 DB2 上的部署.docx

与一般的 Java 程序相比,Java 存储过程在其设计、编写过程中,都有许多不同之处。本文从一个 Java 程序员的角度,初步介绍了如何编写一个 Java 存储过程,以及两种在 DB2 中部署 Java 存储过程的方法。最后本文介绍...
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

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

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