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”和“不存在”等概念是您表示的功能