查找最多h + 1比较的BST元素

时间:2016-01-22 02:18:37

标签: algorithm tree binary-tree binary-search-tree

给定二叉搜索树和元素e,确定树是否包含e,最多使用h + 1比较,其中h是树的高度,==,!=,>,> = ,<和< =是比较。有谁知道如何创建这个算法?

1 个答案:

答案 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。