二分查找的非递归算法实现; 2.二分查找的递归算法实现; 3.基于有序序列的儿又判定树的构造; 4.尝试删除二叉排序树中的节点
时间: 2024-11-27 09:08:57 浏览: 18
一、非递归的二分查找算法实现:
非递归的二分查找通常使用循环结构,它通过不断地比较中间元素与目标值来缩小搜索范围。步骤如下:
1. 初始化两个指针,`low`表示数组的开始索引,`high`表示数组的结束索引。
2. 当`low`小于等于`high`时,继续执行:
a. 计算中间索引 `mid = (low + high) // 2`。
b. 如果中间元素正好是目标值,返回`mid`。
c. 如果中间元素大于目标值,则更新`high = mid - 1`。
d. 否则如果中间元素小于目标值,则更新`low = mid + 1`。
3. 如果没有找到目标值,当`low`大于`high`时,返回-1表示未找到。
二、递归的二分查找算法实现:
递归版本的二分查找类似,但更简洁一些:
```python
def binary_search_recursive(arr, target, low=0, high=None):
if high is None:
high = len(arr) - 1
if low > high:
return -1
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return binary_search_recursive(arr, target, mid + 1, high)
else:
return binary_search_recursive(arr, target, low, mid - 1)
```
三、基于有序序列的AVL(Adelson-Velsky and Landis)平衡二叉查找树构造:
AVL树是一种自平衡二叉查找树,插入新节点后会保持左右子树高度差不超过1。插入过程中,通过对新插入节点及其祖先节点的旋转操作(左旋、右旋),保证树的平衡。
四、删除二叉排序树中的节点:
删除二叉排序树中的节点需要考虑四种情况:要删除的节点无孩子、有一个孩子、有两个孩子。一般步骤如下:
1. 找到要删除节点的前驱或后继节点(即比它小的最大值或比它大的最小值)替换。
2. 替换节点后,根据替换节点的情况对新的节点进行调整(可能是平衡调整,如AVL或红黑树的规则)。
阅读全文