在BST中进行顺序遍历

时间:2015-06-01 17:18:31

标签: c++ algorithm

我有一个平衡的二进制搜索树,我希望找到最左边的节点,它使用类似a的函数存储大于或等于ask(a)这个固定数字的整数。

例如假设我在树中添加了以下几点8,10,3,6,1,4,7,14,13

然后树会是这样的:

enter image description here

现在ask(1)应为1ask(3)应为3ask(2)应为3,依此类推。

我认为我可以使用Inorder遍历来编写我的ask函数,但我不知道如何。

到目前为止,我写了这段代码:

inorderFind(node->left, a);
if (node->key.getX() >= a)
    return node;
inorderFind(node->right, a);

第一个参数是当前树节点,a是上面描述的a。我知道我可以使用像bool这样的flag变量,并在if条件成立时将其设置为true,然后它会阻止遍历树的其他节点并返回假节点。还有什么我可以做的吗?

1 个答案:

答案 0 :(得分:1)

树具有通过简单的递归算法允许查询的奇妙属性。所以,让我们尝试找一个查询的递归表达式。

LEFTMOST(u)是回答这个问题的函数:

  

给定以节点u为根的二进制搜索子树,左(和)可能为null   正确的孩子lr,分别是最左边的节点   值>= a

关系非常简单:

LEFTMOST(u) = LEFTMOST(l) if it exists
              LEFTMOST(r) otherwise

那就是它。你如何将它转化为你的问题以及你如何处理像" null"这样的概念。并且"不存在"是你代表的功能。