我该怎么办?我不确定何时停止bst搜索。
如果树的每个节点都有一个字段numLeft可以告诉您其左子树中有多少个节点(也可以自己计算),则可以在O(log N)
numLeft
O(log N)
只需numLeft为每个值小于的节点添加一个全局结果变量x:
x
countLessThan(int x, node T) if T = null return if T.value >= x countLessThan(x, T.left) // T.left contains only numbers < T.value and T.right only numbers > T.value else globalResult += T.numLeft countLessThan(x, T.right)
这只会计算数字。如果要打印它们,则需要编写深度优先遍历,以打印作为参数给出的子树。您可以在网上找到很多这样的东西,所以我不会发布。