我试图编写一个执行以下操作的方法: 给定BST,写一个递归函数BSTsmallcount,给定一个键值,返回值小于键的节点数。您的函数应该尽可能少地访问BST中的节点。
这就是我所拥有的:
public int BSTsmallcount(BinNode root, int key)
{
int count = 0;
if (root.right < key)
{
count += BSTsmallcount(root.left, key);
}
if (root.left < key)
{
count += BSTsmallcount(root.right, key);
}
return count;
}
但这是不正确的,因为您无法使用二元运算符。我该如何解决这个问题?
答案 0 :(得分:1)
Ya所以你不能只是将地址与值进行比较,我认为这就是你需要的
public int BSTsmallcount(BinNode root, int key)
{
if(root == NULL) return 0;
if (root.left.value < key)
return 1 + BSTsmallcount(root.left, key);
else
return BSTsmallcount(root.left, key);
if (root.right.value < key)
return 1 + BSTsmallcount(root.right, key);
else
return BSTsmallcount(root.right, key);
}
类BinNode中必须存在一个属性,用于存储该节点的值。
答案 1 :(得分:1)
这应该有效:
public int BSTsmallcount(BinNode root, int key){
if(root == null) return 0;
if (root.value() < key)
return 1 + BSTsmallcount(root.left(), key);
else
return BSTsmallcount(root.left(), key);
}
更正: 1.应该为null而不是NULL 2.适当的递归方法只能检查其自己的基本情况。因此,无需检查孩子的价值。