折半查找和二叉排序树的算法实现
时间: 2023-12-31 22:25:02 浏览: 135
折半查找(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
```
阅读全文