【发布时间】:2016-11-06 22:23:39
【问题描述】:
根据我的理解,在完成二分搜索时,您从中间值开始,并在其上完成分治算法,直到找到正确的值。
但是,当我查看二叉搜索树时,我的理解是,这是以相同的方式完成的,初始节点是中间值,但是我看到了以第一个节点作为第一个值的未排序列表的示例数组。
哪种方法是正确的?
谢谢
【问题讨论】:
根据我的理解,在完成二分搜索时,您从中间值开始,并在其上完成分治算法,直到找到正确的值。
但是,当我查看二叉搜索树时,我的理解是,这是以相同的方式完成的,初始节点是中间值,但是我看到了以第一个节点作为第一个值的未排序列表的示例数组。
哪种方法是正确的?
谢谢
【问题讨论】:
通常,您从中间节点开始,然后检查左右两半。
分治算法通过将原始问题分解为较小规模的子问题来递归处理问题。问题将被缩减,直到它小到可以直接解决。
二叉搜索树的情况,算法取中间节点,然后递归求解左右子问题。
BinarySearch(Array arr, value)
return BinarySearchAux(arr, value, 0, arr.length)
BinarySearch(Array arr, value, start, end)
if start >= end
return value == arr[start]
mid = floor((end - start) / 2)
if value == arr[mid]
return true
return
BinarySearchAux(arr, value, start, mid-1) ||
BinarySearchAux(arr, value, mid+1, end)
【讨论】: