【发布时间】:2011-06-13 18:22:33
【问题描述】:
给定一个二叉搜索树和一个整数 K,我想找到小于 K 的最大元素。
在下面的树中,
for K = 13, result = 12
for K = 10, result = 8
for K = 1 (or) 2, result = -1
10
5 12
2 8 11 14
我尝试了以下逻辑。但是有没有更好的方法来做到这一点?
int findNum(node* node, int K)
{
if(node == NULL)
{
return -1;
}
else if(K <= node->data)
{
return findNum(node->left,K);
}
else if(K > node->data)
{
int t = findNum(node->right,K);
return t > node->data ? t : node->data;
}
return -1;
}
【问题讨论】:
-
如果找到 K-1,您应该终止。我无法从您的代码中判断您是否正在执行此操作(尽管这可能很明显,但我不懂 C++)。
-
请定义“更好”。更高效?更准确?
-
@PengOne:您的建议可能更有效,这可能是正确的,但技术上我们并没有被告知 BST 包含整数,只是搜索键是。
-
@Seth Robertson:
int在他的代码中暗示了这一点。 -
@PengOne 如果树通常不包含 K-1,这样的优化可能会比它的价值更高。而且由于
K-1没有出现在代码中的任何位置,而且这是 C,而不是 Malbolge,我发现很难理解人们无法判断上述代码中不存在这样的测试。
标签: c++ c binary-search-tree