查找最多 h + 1 次比较的 BST 元素
Find element of BST with at most h + 1 comparisons
给定一棵二叉搜索树和一个元素 e,最多进行 h + 1 次比较来确定树是否包含 e,其中 h 是树的高度,==、!=、>、>= 、< 和 <= 是比较。有谁知道如何创建这个算法?
首先,编写一个函数,在树中找到大于或等于您的值的最小项。
在pseudo-code中:
function find_min_ge(x, node, min_ge) {
if node is nil {
return min_ge
}
if node.x >= x {
return find_min_ge(x, node.left, node.x)
} else {
return find_min_ge(x, node.right, min_ge)
}
}
此处,"min_ge" 参数是目前找到的 >= x 的最小值。
然后,将结果与x比较:
x_in_tree = find_min_ge(x, root, x + 1) == x
x+1 是一个虚拟值,如果树中没有 >= x 的元素,它将被返回。 x+1 可以是任何不等于 x 的表达式。
总的来说,find_min_ge 执行最多 h 次“>=”比较,然后在最后进行一次额外的“==”比较,总计达到要求的最大 h+1 次。
给定一棵二叉搜索树和一个元素 e,最多进行 h + 1 次比较来确定树是否包含 e,其中 h 是树的高度,==、!=、>、>= 、< 和 <= 是比较。有谁知道如何创建这个算法?
首先,编写一个函数,在树中找到大于或等于您的值的最小项。
在pseudo-code中:
function find_min_ge(x, node, min_ge) {
if node is nil {
return min_ge
}
if node.x >= x {
return find_min_ge(x, node.left, node.x)
} else {
return find_min_ge(x, node.right, min_ge)
}
}
此处,"min_ge" 参数是目前找到的 >= x 的最小值。
然后,将结果与x比较:
x_in_tree = find_min_ge(x, root, x + 1) == x
x+1 是一个虚拟值,如果树中没有 >= x 的元素,它将被返回。 x+1 可以是任何不等于 x 的表达式。
总的来说,find_min_ge 执行最多 h 次“>=”比较,然后在最后进行一次额外的“==”比较,总计达到要求的最大 h+1 次。