我有一个代码可以解决这些问题。您能否给我一些提示或指导,以说明我正在犯的错误或应该做出的任何更改?错误是:
BSTNode'<'Golfer'>'无法转换为BinarySearchTree'<'Golfer'>'。
public int countLess (BinarySearchTree <Golfer> tree, int value) {
BSTNode<Golfer> node = tree.node;
if (node == null)
return 0;
int left = countLess(node.getLeft(), value);
int right = countRight(node.getRight(), value);
return (node.getInfo() > maxValue ? 1:0) + countLeft + countRight;
}
答案 0 :(得分:1)
我认为应该是这样的,因为我猜node.getLeft()
实际上为您提供了BST中的节点而不是完整的Left Subtree。
public int countLess (BSTNode <Golfer> node, int value) {
if (node == null)
return 0;
int left = countLess(node.getLeft(), value);
int right = countLess(node.getRight(), value);
return (node.getInfo() > maxValue ? 1:0) + left + right;
}
希望这可以解决您的问题。如果可以共享BinarySearchTree的实现和BSTNode类的实现,我可以提供一种更正确的解决方案。
答案 1 :(得分:0)
我认为您应该对BST
进行有序遍历。 BST
的有序遍历始终为您提供按升序排列的元素。只需在进行有序遍历时保留count
变量(并为访问的每个节点不断增加变量),然后任何节点的值都超过X,就可以“中断”。
您的count
变量中的最终值将是答案。
BST:二进制搜索树