C++ BST中的有序遍历

C++ BST中的有序遍历,c++,algorithm,C++,Algorithm,我有一个整数的平衡二元搜索树,我想找到最左边的节点,该节点存储大于或等于一个固定数字的整数,如a,使用类似ask(a)的函数 例如,假设我在树中添加了以下几点,8,10,3,6,1,4,7,14,13 那么这棵树就是这样的: 现在ask(1)应该是1,ask(3)应该是3,ask(2)应该是3,依此类推 我想我可以使用顺序遍历来编写ask函数,但我不知道如何编写 到目前为止,我写了这段代码: inorderFind(node->left, a); if (node->key.get

我有一个整数的平衡二元搜索树,我想找到最左边的节点,该节点存储大于或等于一个固定数字的整数,如
a
,使用类似
ask(a)
的函数

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

那么这棵树就是这样的:

现在
ask(1)
应该是
1
ask(3)
应该是
3
ask(2)
应该是
3
,依此类推

我想我可以使用顺序遍历来编写
ask
函数,但我不知道如何编写

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

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

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

树具有通过简单的递归算法进行查询的奇妙特性。因此,让我们尝试找到查询的递归公式

假设
最左边(u)
是回答此问题的函数:

给定以节点
u
为根的二进制搜索子树,左和右 右边的子节点分别是
l
r
,最左边的节点是什么 值
>=a

关系很简单:

LEFTMOST(u) = LEFTMOST(l) if it exists
              LEFTMOST(r) otherwise
就这样。您如何将其转化为您的问题,以及如何处理“null”和“不存在”等概念是您表示的功能