折半查找和二叉排序树

一、实验目的
1、掌握查找的特点。
2、掌握折半查找的基本思想及其算法。
3、熟悉二叉排序树的特点,掌握二叉排序树的插入、删除操作。
二、实验内容
1、设有关键字序列k={ 5 ,14 ,18 ,21 ,23 ,29 ,31 ,35 },查找key=21和key=25的数据元素。
2、根据关键字序列{45、24、53、12、37、93}构造二叉排序树,并完成插入13删除关键字53和24的操作。
三、实验环境
Eclipse环境或C++编程环境
四、实验步骤
1、折半查找
(1)从键盘输入上述8个整数5 ,14 ,18 ,21 ,23 ,29 ,31 ,35,存放在数组bub[8]中,并输出其值。
(2)从键盘输入21,查找是否存在该数据元素,若存在,则输出该数据元素在表中的位置,否则给出查找失败的信息。
(3)从键盘输入25,查找是否存在该数据元素,若存在,则输出该数据元素在表中位置,否则给出查找失败的信息。
2、二叉排序树
(1)二叉排序树存储定义
(2)从键盘上输入六个整数45、24、53、12、37、9构造二叉排序树
(3)输出其中序遍历结果。
(4)插入数据元素13,输出其中序遍历结果。
(5)删除数据元素24和53,输出其中序遍历结果。

折半查找:

package shiyan4;

import java.util.Scanner;
public class BinarySearch {
   
	public static void main(String[] args) {
   
		System.out.println("请输入8个整数:");
		Scanner sc=new Scanner(System.in);
		int [] bub=new int[8];
		for(int i=0;i<bub.length;i++) {
   
			bub[i]=sc.nextInt();
			System.out.print(bub[i]+" ");
		}
		Scanner sc1=new Scanner(System.in);
		System.out.println("请输入要查找的数据:");
		for(int i=0;i<2;i++) {
   
			int x=sc.nextInt();
			int loc=binarySearch(bub,bub.length,x);
			System.out.print(loc);
		}
}
	private static int binarySearch(int [] bub,int length,int x) {
   
		int left=0;
		int right=length-1;
		int mid;
		while(left<=right) {
   
			mid=(left+right)/2;
			if(bub[mid]==x) {
   
				return mid;
			}
			else if(bub[mid]>x) {
   
				right=mid-1;
			}
			else {
   
				left=mid+1;
			}
		}
		return -1;
	}
}

测试类:

package shiyan4;
import java.util.Scanner;

	

	public class Test1 {
   
		public static int binarySearch(int a[],int key){
   
			int length
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
折半查找(Binary Search)和二叉排序树(Binary Search Tree)是两种常用的查找算法。 1. 折半查找算法实现: 折半查找是一种在有序数组中查找指定元素的算法。它的基本思想是将数组分成两部分,然后判断目标元素与中间元素的大小关系,进而确定目标元素在哪一部分中,然后再在该部分中进行查找,如此循环直到找到目标元素或者确定目标元素不存在。 以下是折半查找的算法实现示例: ```python def binary_search(arr, target): low = 0 high = len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 # 目标元素不存在 arr = [5, 14, 18, 21, 23, 29, 31, 35] target = 29 result = binary_search(arr, target) print("小于29的最大关键字值是:", arr[result-1]) # 输出:23 ``` 2. 二叉排序树算法实现: 二叉排序树是一种特殊的二叉树,它的每个节点的左子树的所有节点的值都小于该节点的值,右子树的所有节点的值都大于该节点的值。通过这种特性,可以实现高效的插入和删除操作。 以下是二叉排序树的算法实现示例: ```python class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None def insert(root, val): if root is None: return TreeNode(val) if val < root.val: root.left = insert(root.left, val) else: root.right = insert(root.right, val) return root def delete(root, val): if root is None: return root if val < root.val: root.left = delete(root.left, val) elif val > root.val: root.right = delete(root.right, val) else: if root.left is None: return root.right elif root.right is None: return root.left else: min_node = find_min(root.right) root.val = min_node.val root.right = delete(root.right, min_node.val) return root def find_min(root): while root.left: root = root.left return root def inorder_traversal(root): if root: inorder_traversal(root.left) print(root.val, end=" ") inorder_traversal(root.right) # 构造二叉排序树 keys = [45, 24, 53, 12, 37, 93, 13] root = None for key in keys: root = insert(root, key) # 删除关键字53和24 root = delete(root, 53) root = delete(root, 24) # 中序遍历二叉排序树 inorder_traversal(root) # 输出:12 13 37 45 93 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值