给定二叉搜索树和元素e,确定树是否包含e,最多使用h + 1比较,其中h是树的高度,==,!=,>,> = ,<和< =是比较。有谁知道如何创建这个算法?
答案 0 :(得分:3)
首先,编写一个函数,在树中找到大于或等于你的值的最小项。
在伪代码中:
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,则x + 1是一个虚拟值。 x + 1可以是任何不等于x的表达式。
总的来说,find_min_ge最多执行h“> =”比较,然后在最后完成一次额外的“==”比较,根据需要总计最多h + 1。